Spring核心
核心一:IoC(Inverse of Control 控制反转): 将对象创建权利交给Spring工厂进行管理。比如说:Book book = new Book();
Book book2 = Spring工厂.getBook();
IoC的底层实现:工厂模式+反射+配置文件(xml)
IoC容器装配Bean基于xml的四种方式:
1、无参数构造函数
2、静态工厂方式
3、实例工厂方式
4、FactoryBean方式
属性依赖注入xm的三种方式:
1、构造器参数注入(构造函数带参数);
2、setter方法注入;
3、接口注入
初始化方法,销毁方法:
<bean id="lifeCycleBean" class="cn.itcast.spring.d_xmllifecycle.LifeCycleBean" init-method="init" destroy-method="destroy" />
单例多例:
<bean id="prototypeBean" class="cn.itcast.spring.c_xmlscope.PrototypeBean" scope="prototype"/>
<bean id="singletonBean" class="cn.itcast.spring.c_xmlscope.SingletonBean" scope="singleton"/>
IoC容器装配Bean基于注解的配置方式:
<context:component-scan base-package="cn...包名"/>
@Component 相当于在spring容器中定义<bean id=”” class=””>
除了@Component外,Spring提供了3个功能基本和@Component等效的注解
@Service用于标注业务层组件、(如Service层)
@Controller用于标注控制层组件(如struts中的action层)
@Repository用于标注数据访问组件,(如DAO层组件)。
而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
属性依赖注入注解的方式:
@Value
@Autowired//默认按照类型注入
(
@Autowired//默认按照类型注入的
@Qualifier("customerDao")//必须配合@Autowired注解使用,根据名字注入
)
@Resource//默认先按照名称进行匹配,再按照类型进行匹配
@Inject//默认按照类型注入
初始化方法和销毁方法注解:
使用 @PostConstruct 注解, 标明初始化方法 ---相当于 init-method 指定初始化方法
使用 @PreDestroy 注解, 标明销毁方法 ----相当于 destroy-method 指定对象销毁方法
作用域:
@Scope("prototype")//默认是单例(singleton),更改为多例(prototype)
核心二:AOP(Aspect Oriented Programming 面向切面编程),基于动态代理的功能增强方式。
应用场景:
记录日志,
监控性能,
权限控制,
缓存优化,
事务管理
传统的jdk的动态代理:需要接口
proxy.newproxyinstance(
目标类加载器,目标类接口,new invocationHandler(
invoke方法(obj,method,args)
)
)
cglib动态代理:不需要接口
- Jdk代理:基于接口的代理,一定是基于接口,会生成目标对象的接口类型的子对象。
- Cglib代理:基于类的代理,不需要基于接口,会生成目标对象类型的子对象。
Spring默认使用的是jdk自带的动态代理,如果类没有接口,那么会采用cglib动态代理的方式
aspectj的方式进行代码增强
aop编程的三大步骤
配置被增强的类,
配置增强的类,
切入点,aspectj,pointCut
注解方式:
<!-- 1。确定目标 -->
<!-- 扫描bean组件 -->
<context:component-scan base-package="cn.itcast.spring"/>
<!-- 2:编写通知 -->
<!-- 3:配置aop的aspectj的自动代理:
自动扫描bean组件中,含有@Aspect的bean,将其作为aop管理,开启动态代理 -->
<aop:aspectj-autoproxy/>