1.依赖注入(DI)(IOC)

  

  对象本身不负责对象的创建和维护,将控制权转交给外部的容器实现,降低程序的耦合度,只提供java方法让容器决定依赖关系,依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象,使用<bean>元素去构造组件时,为id定义一个唯一的名称,通过调用属性的setter方法实现。

  以多种方式实现依赖注入,分为构造注入,p命名注入;

 构造注入

    在applicationContext.xml中使用<constructor-arg> 去定义DAO实现,使用时不分顺序,由index属性指定该位置的索引,提供type属性去区分字符串和基本数据类型的混淆.

 P命名注入

    P:PropertyName="Variable"

  注入数据类型<value/>注入空字符串,<null/>=>null

2.增强类型

  异常抛出增强

public static  ErrorLogger implements ThrowsAdvice{

     void affterThrowing(Method method,Object[]args,Object target,SQLException ex);

     void afterThrowing(SQLException ex);

      void afterThrowing(RunntimeException ex);
}

  环绕增强

在目标方法前后可以织入增强,其根本就是加强控制权的转交.

public class AroundLogger implements MethodInterceptor{

 @Override
Object Invoke(MethodInvocation arg0){
...
try{
arg0.proceed();
}catch(Throwable e){
...
}
}
}

注解定义增强

 spring通过@AcpectJ实现注解增强,在AspectJ5新增的功能,

@Aspect
public class BizLogger{
@Before("execution(* biz.Biz.*(..))")
void before(){
} @AfterReturning("execution(* biz.Biz.*(..))")
void afterRuterning(){
...
}
}

@Before将before定义为前置增强,@AfterReturning将afterReturning()定义为后置增强

同时需要在applicationContext.xml定义配置文件

<aop:aspectj-autoproxy/>
<bean class="Class"/>

也可以通过注解定义环绕增强

@Aspect
class AroundLogger{ @Around("execution(..)")
Object aroundLogger(ProceedingJoinPoint jp){
try{
Object result= jp.procees();
}catch(Throwable ex){ }
}
}

3.SessionFactory

  通过定义class为org.springframework.orm.hibernate3.LocalSessionFactoryBean指定文件位置后需要为对象提供关系映射文件

  

<property name="mappingDirectoryLocations">
<list>
<value>classpath:PATH</values>
</list>
</property>

在对DAO业务开发时提供HIbernateTemplate接口进行开发

public class DaoImpl extends HibernateDaosupport implements Dao{

   void Update(object entity);

  void delete(Object entity);

  Object  getClass(Class entityClass,Serializable id);

  void saveOrUpdate(Object entity);

}

4.事务处理

在硬编码中容易产生复杂,spring提供事务处理进行代码与业务分离,降低开发和维护难度通过配置tx和aop进行事务处理操作

通过在bean标签中定义<tx:advice id="" transaction-manager="">定义事务标签,可通过<tx:attributes>进行标签定制事务属性,具有以下标签

  propagation:事务传播

  •     REQUIRED:默认值,如果存在一个事务,则支持当前事务,如果没有创建一个
  • SUPPORT:如果存在支持当前事务,如果没有按非事务方式执行
  • MANDATORY:存在支持,没有抛出异常
  • REQUIRES_NEW 总是开启一个事务,存在挂起,没有新事务执行
  • NOT_SUPPORTED 非事务执行,存在挂起
  • NEVER:非事务执行
  • NESTED:不再在当前活动事务,则创建嵌套事务

  isolation:事务隔离级别默认为DEFAULT

read-only:事务是否只读

rollback-for:设置回滚异常

no-rollback-for:设置不回滚异常类型

5.web.xml

ContextLoaderListener

Spring需要提供监听服务来控制容器在web.xml进行创建

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <!-- add listener service -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener-class>
</listener>

OpenSessionInViewFilter

    作用把Hibernate Session和一次完整的请求过程绑定,保证在一次请求过程中始终保持一个Session在开启,解决了延迟加载等问题

 <fillter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern> </filter-mapping>
<!-- 需要在struts StrutsPrepareAndExecuteFilter前面,否则无法发挥作用-->

6.Bean Scope

  除了可以对bean进行注入,也可以指定作用域,决定spring的组建策略,影响程序的运行效率和数据安全主要分为5种

Snigleton :默认值,以单例创建实例,保证实例只有一个,为gc减轻负担

prototype: 每次从容器获取bean时,创建一个实例

request :for Web,针对HTTP请求会创建一个实例

session:web同一个会话共享一个实例,不同的会话使用不同的实例

global Session:仅在Portlet的WEB,同一个全局共享一个实例.

7.JNDI

  spring提供饮用JNDI资源的JndiObject'FactoryBean类

<Context>
<Resource name="jdbc/jboa" auth="Container"
type="javax.sql.DataSource"
driverClassName="..."
user-"" password=""
</Context> <!--DataSource -->
class="org.springframework.jndi.JndiObjectFactoryBean">

8.注解SessionFactory

通过定义annotationsessionfactorybean配置注解,是LocalSessionFactoryBean子类,需要进行一下配置

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation,AnnotationSessionFactoryBean"
> <!-- Annotation PO-->
<property name="annotatedClasses"> <!--loading po class to Scan --> <property name="packagesToScan" value="Entity"/>

9.自动装配

在需要过多的配置量时,可通过自动装配实现autowire进行自动装配,可以配置以下属性

no   不使用自动配置

byType  根据属性自动装配,如果有一个依赖属性类型则自动装配,如果有多个则抛出一场,如果没有匹配bean,属性不会被设置

byName  根据属性名进行配置,找出id与属性的setter方法匹配的bean,找到自动注入

constructor:应用于构造起参数,如果没有找到一致的Bean,则抛出异常.

通过使用default-autoWire进行减少维护注入方式

10.依赖检查

可以使用依赖检查来保证Bean属性正确的设置,通过<dependeny-check>或者default-dependency-check进行设置全局依赖检查.具有相关一下属性

none:不进行依赖检查

obejcts:检查BeanFactory中其他Bean的依赖

sunple 检查原始

all:同时检查

11.注解定义Bean

利用@Component进行映射配置

@Repository 用于标注DAO类

@Service 用于标注业务类

@Controller 用于标注控制器

@Qualifier用于标注按名称匹配方式

@AutoWired进行自动装配

@Scope用与进行作用于匹配

当需要使用注解进行操作需要在xml进行以下配置

1.添加context命名空间

2.标注扫描包中的类

<context-component-scaan base-package="*">

也可以通过注解配置事务处理

<tx:annotation-driven transaction-manager="txManager">

在业务方法中添加@Transactional实现,具有以下特性

  1.传播设置PROPEAGATION_REQUIRED

  2.隔离级别为ISOLATION_DEFAULT

  3.事务为r/w

  4.超时默认以来事务处理

最新文章

  1. 如何dos中查看当前MySQL版本信息?
  2. Windows10下的JDK环境配置。
  3. SSIS的 Data Flow 和 Control Flow
  4. Linux软raid创建
  5. 安装sql2008的时候选择的是Windows身份验证,现在我想用sql server身份验证,我应该到哪儿设置呢
  6. loadrunner通过C语言实现字符的替换(只能替换单个字符,慎用)
  7. Running With xpi
  8. STL Iterators
  9. uses-permission权限列表
  10. no symbol version for module_layout
  11. NodeJs使用Mysql模块实现事务处理
  12. Android 图片处理方法
  13. Javascript 中神奇的 this
  14. hibernate 一对多操作(级联操作)
  15. android基础5——使用资源
  16. DataTable的名称要后设置
  17. HttpURLConnection getInputStream异常的解决
  18. 同步IO和异步IO
  19. 环境变量配置为jdk8,显示的java版本为jdk7
  20. 关于Python的一些看法

热门文章

  1. Java练习 SDUT-1140_面向对象程序设计上机练习一(函数重载)
  2. qt开发ROS gui界面环境配置过程总结
  3. 阿里云POLARDB 2.0重磅来袭!为何用户如此的期待?
  4. oracle使用TKPROF 工具来查询SQL性能状态
  5. Pytorch | BERT模型实现,提供转换脚本【横扫NLP】
  6. H3C 路由协议与可路由协议
  7. python中使用指定GPU
  8. [转]cron表达式的用法
  9. H3C Basic NAT
  10. 央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家