spring介绍(一)

2014-11-24 10:29:08 · 作者: · 浏览: 3

1.DI 依赖注入
在Spring框架中,两个组件对象之间具有依赖关系(使用和被使用),依赖注入技术就是将被使用者对象给使用者对象传进去.
*1)setter方式注入(推荐)
a.在使用者中,定义"接口类型"的变量和setter方法
b.在spring容器配置中,添加
2)构造方式注入
a.在使用者中,定义"接口类型"的变量和带参数的构造方法
b.在spring容器配置中,添加
*2.IOC
IOC Inversion Of Controll 反向控制,控制转移
在Spring中利用DI技术,实现了IOC机制,将两个组件解耦.
控制权:可以指定调用关系,可以创建对象,可以管理和释放对象.
一般编程,使用者具有控制权,可以指定调用哪个组件,负责创建对象这些工作;但是基于Spring框架之后,
使用者控制权转移到了Spring容器,由Spring容器负责这些工作.
采用了IOC之后,如果底层组件(DAO)发生替换,只要修改Spring容器的配置,不需要修改上层组件(Action),
将组件进行了解耦,增强了程序结构的灵活性.

3.各种类型值注入的格式
1)基本类型值的注入格式

15

*2)Bean对象的注入格式


3)集合类型值的注入格式
List,Set,Map,Properties类型注入格式


4.组件自动扫描(了解)
此功能从spring2.5开始支持,因为2.5开始基于jdk5.0,从jdk5.0开始有了注解技术.
利用该技术,可以将指定package下的组件,自动扫描纳入到spring容器中.避免在xml中编写大量元素
使用方法如下:
1)在spring的xml配置中,引入context命名空间
2)利用元素

3)如果发现包中的类,类定义前面有以下注解,将纳入spring容器,id名默认采用类名(首字母小写).
@Controller :扫描控制层组件的注解标记,例如Action
@Service :扫描业务层组件的注解标记,例如Service
@Repository :扫描数据访问层组件的注解标记,例如DAO
@Component :其他组件
如果需要自定义id名,可以采用@Controller("id自定义名")
4)属性注入注解
在变量定义前,使用@Resource注解标记,spring默认会采用类型匹配原则将符合的bean对象注入进来.
如果按指定id名注入bean对象,可以使用
@Resource(name="bean对象的id名").
注入还可以使用@Autowired,如果需要注入指定名的bean对象.
@Autowired
@Qualifier("hibernateUserDAO")
注意:setter方法可以不写,将来spring自动生成.
5)其他注解
@Scope("prototype")//等价于
@PostConstruct//等价于
@PreDestroy//等价于


1.AOP的概念及优点
Aspect Oriented Programming面向方面编程.
面对象编程的关注点是对象,面向方面编程以面向对象编程为基础,关注点是切面,切面组件可以作用在若干目标对象的方法上,封装了具有通用性的一些处理.例如日志记录,事务处理,异常处理等等.
面向方面编程优点:将共通处理封装成了一个独立组件,利用配置形式作用在了某一批目标对象上,实现组件的重复利用,将切面和目标对象解耦,实现了低耦合应用.
*a.切面(Aspect)
封装了共通处理的组件,可用于切入到目标对象的处理方法中
*b.切入点(Pointcut)
用于指定目标对象和方法的一个表达式.是连接点的集合.
连接点是切面组件与某一个目标对象方法的作用点,例如方法调用和异常发生
*c.通知(Advice)
用于指定切面功能切入目标对象方法的位置.例如切入到目标方法调用之前,目标方法调用之后等.
通知类型:前置通知,后置通知,环绕通知,最终通知,异常通知
try{
//执行前置通知
//执行环绕通知--前置
执行目标对象方法
//执行环绕通知--后置
//执行后置通知
}catch(Exception ex){
//执行异常通知
}finally{
//执行最终通知
}


d.目标对象(Target)
需要使用切面功能的,被切入的Bean对象.使用切入点表达式指定
e.动态代理(AutoProxy) www.2cto.com
在Spring采用了AOP之后,从容器取出的目标对象是一个动态代理类型,调用代理对象方法时,代理对象会调用切面功能和目标对象功能.
动态代理类生成技术:
有接口的目标对象采用JDK Proxy技术.
没有接口的目标对象采用CGLIB技术.
2.切入点表达式的定义
1)方法限定execution
execution(修饰符 返回类型 方法名(参数类型) throws 异常 )
a.匹配com.tarena.UserDAO的save()方法
execution(* com.tarena.UserDAO.save(..))
b.匹配com.tarena.UserDAO的所有方法
execution(* com.tarena.UserDAO.*(..))
c.匹配com.tarena.UserDAO的所有public void方法
execution(public void com.tarena.UserDAO.*(..))
d.匹配com.tarena包下所有类型的所有方法
execution(* com.tarena.*.*(..))
e.匹配com.tarena包下及其子包所有类型的所有方法
execution(* com.tarena..*.*(..))
f.匹配UserDAO中有一个参数并且是String类型的方法
execution(* com.tarena.UserDAO.*(java.lang.String))
2)类型限定within
within(类型)
a.匹配com.tarena.UserDAO的所有方法
within(com.tarena.UserDAO)
b.匹配com.tarena包下的所有类的所有方法
within(com.tarena.*)
c.匹配com.tarena包下及其子包的所有类的所有方法
within(com.tarena..*)
3)id名限定bean
bean(idOrName属性值)
a.匹配容器中所有id或name属性值以dao结尾的bean对象
bean(*dao)


1.Spring与Struts2整合(方法二推荐使用)结构图参考ssh2-1.j