1 Spring
1.1 原理
1.1.1 IOC
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
1.1.2 AOP
AOP的主要原理:动态代理
提示: 1. 静态代理: 针对每个具体类分别编写代理类; 针对一个接口编写一个代理类; 2. 动态代理: 针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类 |
|
1.2 spring的7个模块
1. spring核心容器(Core)
2. spring上下文
3. springAOP
4. SpringDAO
5. SpringORM
6. springWeb支持struts集成
7. springMVC自带的mvc框架
1.3 spring的依赖注入(反射)
1. 接口注入
2. 构造注入
3. Setter注入
1.4 Spring实例化bean的三种方式
1. 默认使用类加载器
2. 使用静态工厂方法实例化bean对象
<bean id="名称" class="工厂类"factory-method="工厂类中创建bean实例的方法"/>
3. 使用实例工厂方法实例化bena对象
<bean id="实例工厂名称"class="工厂类的路径"/>
<bean id="名称" factory-bean="实例工厂名称"method="实例工厂里边的创建bena对象的方法"/>
1.5 Spring管理的bean的作用域
1. Spring生成的bean默认为单实例。singleton。
2. 如果需要每次调用Spring的getBean方法就创建一个 bean的实例,可指定bean的属性scope="prototype"
3. request、session、globalsession 这3个一般基于web的spring ApplicationContext情形下有效。
1.6 Spring的手工装配和自动装配
1.6.1 手工装配
手动的将bean中所关联的其他bean装配进去
<bean id="storeService"class="service.StoreServiceImpl">
<propertyname="orderDao" ref="orderDao"/>
</bean>
1.6.2 自动装配
使用autowire关键字声明bean的自动装配方式。其可选值为byName、byType、constructor
<bean class="dao.OrderDaoImpl"autowire="byName"></bean>
1.7 Spring的Bean生命周期
1. 当作用域范围为singleton时,在初始化Spring容易的时候实例化bean实例。
如果lazy-init的值为true,则为延迟bean的实例化,即在Spring容器启动时不实例化bean的对象
2. 当作用域范围为prototype时,在调用Spring的getBean的方法时实例化bean对象
1.8 Spring声明式事务
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="defaultTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="remove*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException" />
<tx:method name="add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.RuntimeException" />
<tx:method name="modify*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="select*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pc" expression="execution(public * com.js.free.oa.service.*.*(..))" /><!--把事务控制在Service层-->
<aop:advisor pointcut-ref="pc" advice-ref="defaultTxAdvice" />
</aop:config>