您的位置:首页 > 编程语言 > Java开发

Spring理论知识点

2016-03-31 23:28 531 查看

1.Spring框架的作用

Spring是一个容器性质的框架.可以管理Bean对象的创建和销毁.

Spring容器具有IoC和AoP特性.

2.Ioc和Aop的概念

IoC : Inverse of Controll 反向控制或控制反转.
AoP : Aspect of Programming 切面编程.


3.Spring容器的对象管理

引入spring.jar和commons-logging.jar两个基本包.

(1)创建容器配置文件,添加的定义

(2)创建容器对象,获取bean对象

ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);

ctx.getBean(“别名”); PersonDAO personDAO = (PersonDAO)ctx.getBean(“personDAO”);

4.使用工厂方式创建对象

*(1)容器通过反射创建

(2)工厂方法

(3)静态工厂方法

5.对象的生命周期

(1)对象创建时机
默认是在容器创建时,将对象创建出来.
可以在<bean/>元素中使用lazy-init="true",将该对象指定为使用时创建.
(2)指定对象初始化和销毁方法
可以在<bean/>元素中使用init-method="方法名"指定初始化
方法可以在<bean/>元素中使用destroy-method="方法名"指
定销毁方法,此属性只对单例模式有效
init方法在创建对象时执行,destroy方法在销毁容器时执行.
(3)默认情况下,容器创建的对象的模式是一个单例模式.
可以在<bean/>元素中使用scope指定创建模式.默认为singleton,可以指定为prototype
如果应用于Web环境中,可以指定为request,session,global session


6.DI(依赖注入) Dependence Inject

(1)setter方法注入(推荐使用)
<property name="personDao" ref="personDao2"/>
(2)构造方法注入
<constructor-arg index="0" ref="personDao">
</constructor-arg>
(3)注解方式注入(推荐使用,以后介绍)


1.集合属性注入

注入Set,List,Map,Properties类型的属性值

2.注解方式配置

注解可以简化XML配置.

(1)自动扫描(引入common-annotation.jar包)

a.首先在spring主配置文件中添加

b.在class中使用注解,指定哪些Bean被纳入容器.

@Component、@Controller、@Service、@Repository

注意 : 扫描的组件默认别名为”类名首字母小写”,

可以在注解中指定别名,格式为:@Service(“别名”)

(2)生命周期控制及scope创建模式

@PostConstruct 等价于元素中的init-method

@PreDestroy 等价于元素中的destroy-method

@Scope(“prototype”)等价于元素中的scope=”prototype”属性

(3)注入

a. @Autowired : 按类型匹配注入.如果需要按照名称,可以使用@Qualifier(“personDao”)指定Bean别名

@Autowired(required=false) : required属性表示该属性是否必须注入一个对象.

b. @Resource : 默认先按名称,再按类型.如果需要按照名称,可以使用@Resource(name=”personDao”)

注意:如果单独使用(2),(3)注解,需要在spring配置中添加

如果使用(1),(2),(3)注解,只需要指定自动扫描配置就可以.

3.AOP

AOP:面向切面编程.是对OOP编程的提升,可改善程序结构.

主要思想是将共通处理封装成切面对象,利用Spring容器将切面对象

作用到某一批目标对象之上。当执行目标对象方法时,会执行切面对象的功能.

(1)相关概念

a. 切面:用于封装共通处理(即关注点),将来用于横切多个目标对象

b. 连接点:程序在调用时的某个特定点,比如方法调用或者异常处理.

c. 切入点: 连接点的集合,一个连接点集合的表达式(与正则表达式相似)

d. 通知:在连接点上执行的动作,比如前置通知,后置通知,异常通知,环绕通知,最终通知.

e. 织入:把切面连接到其他应用程序类型或对象上.该过程在运行时完成.

f.目标对象:目标对象

g. AOP代理:Spring容器会为每一个目标对象动态创建一个AOP代理对象.

由该对象执行切面处理方法和目标对象的方法

try{

执行前置通知方法

//执行环绕通知前半部分处理

执行目标对象方法

//执行环绕通知后半部分处理

执行后置通知方法

}catch(){

执行异常通知方法

}finally{

执行最终通知方法

}

(2)AOP示例(注意:引入aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1_3.jar)

execution - 匹配方法执行的连接点,

这是你将会用到的Spring的最主要的切入点指示符。

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)

throws-pattern?)

任意公共方法的执行:

execution(public * *(..))

任何一个名字以“set”开始的方法的执行:

execution(* set*(..))

AccountService接口定义的任意方法的执行:

execution(* com.xyz.service.AccountService.*(..))

在service包中定义的任意方法的执行:

execution(* com.xyz.service..(..))

在service包或其子包中定义的任意方法的执行:

execution(* com.xyz.service...(..))

1.AOP注解配置

(1)在spring配置文件中启用AOP注解
<aop:aspectj-autoproxy/>
(2)编写切面组件,使用以下注解定义切入点,通知等
@Aspect : 将当前类指定为切面组件
@Pointcut : 定义切入点
@Around("切入点引用")
@Before("切入点引用")
@After("切入点引用")
@AfterReturning(pointcut="切入点",returning="参数名")
@AfterThrowing(pointcut="切入点",throwing="参数名")


2.切入点定义

(1) execution表达式 : 匹配方法的连接点.
execution (modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)
throws-pattern?)
(2) bean表达式 : 匹配容器中bean对象的id或name属性值
bean (idOrNameOfBean)
(3) within表达式: 匹配某一个或某一批特定类型
within(包名.类型)


示例1:在com.xyz.service.DeptService接口中的任意连接点

within(com.xyz.service.DeptService)

示例2:在service包中的任意连接点

within(com.xyz.service.*)

示例3:在service包或其子包中的任意连接点

within(com.xyz.service..*)

(4) this和target : 匹配某一个类型实例的任意连接点.与within区别在于不允许使用通配符

this(代理对象类型),target(目标对象类型)

示例1 : 实现了AccountService接口的代理对象的任意连接点

this (com.xyz.service.AccountService)

示例2 : 实现AccountService接口的目标对象的任意连接点

target (com.xyz.service.AccountService)

(5) args表达式 : 匹配方法参数类型的连接点

args (参数类型)

示例1 : 任何一个只接受一个参数,

并且运行时所传入的参数是Serializable 接口的连接点

args (java.io.Serializable)

(6)以上表达式可以使用运算符组合

||,&&,!,and,or,not

3.-Spring框架作用

Spring框架提供了一套完整的企业级解决方案.基于该框架可以


整合现有流行的Struts,Hibernate等框架.可以降低各层组件之间的依赖性.

4.Spring框架对JDBC的支持

(1)引入数据库驱动和dbcp连接池的jar包.

commons-dbcp.jar,commons-pool.jar,commons-collections.jar,mysql-connector-java-5.1.6-bin.jar

(2)在spring配置文件中添加dataSource的定义

(3)编写DAO组件,使用JdbcTemplate工具类

(4)在spring配置文件中添加dao定义,注入dataSource对象

1.Spring事务管理

分为编程方式和声明式事务管理.项目一般都采用声明式事务管理.

Spring的声明式事务管理是通过Spring AOP实现的

(1)基于XML配置方式

a. 定义事务管理Bean

—-jdbc—-

—–hibernate—–

b.定义通知
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>

c.采用aop切入
<aop:config>
<aop:pointcut id="txPointcut" expression="bean (*Service)"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>


(2)事务策略

REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作。

拥有多个可以回滚的保存点,内部回滚不会对外部事务产生影响。只对DataSourceTransactionManager有效

####2.注解方式配置事务

a.在spring配置文件中启用事务注解

b.在需要事务控制的组件中使用@Transactional

–可以定义在类前面,表示类中所有业务方法都采用默认事务控制

–如果有些个别方法不需要使用事务控制,可以在该方法前面使用

@Transactional(propagation=Propagation.NOT_SUPPORTED)

–默认情况下,业务方法遇到RuntimeException异常才会rollback,

如果有其他类型异常需要rollback,可以使用

@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: