Spring
Spring
以往的对象都需要New 如果从一个工厂类中获取我想要的类,那就方便很多
Ioc 此时就有了个spring容器,里面放了很多的bean,只需要配置好sprng的核心文件,spring就会自动加载这个容器创建出配置文件的bean 配置文件的名称可以看作这个容器的名称
怎样将bean放入容器中
1。xml 配置
2。注解@configuration 中的@bean方法名对象 放入容器中
3。@Compment
依赖注入
xml文件中propername属性等于这个类中有这个属性
复杂对象:@bean xxxFactory 返回值是getObject的对象放入容器中
引入 其他文件<context: property-placholder>
converter. 实现这个接口,实现其中的方法 ???
Bean的生命周期
1。构造方法
2。set方法
3。beannameAware接口中的setBeannaem告诉你这个bean 的名字
4。ApplicationtextAware 接口中的setApplicationAware 告诉你这个bean在哪个容器中
5。BeanPostProcessor 接口中的 before 方法 bean 的处理器,每个bean都要经历的
两个初始化方法
6。InitializingBean接口中的
7。init-method配置文件中的
8。beanpostprocessor 中的 after方法
9。业务方法
两个消毁方法
10。Disposablebean 接口中的
11。Destroy-method 配置文件中的
每个bean都会经历BeanPostProcessor方法,俗称bean的处理器
动态代理
我们想要实现在不改变原有业务代码而增加附加的功能效果
jdk代理
在bean处理器中调用before方法,将代码写在其中,每个bean都会执行,实现功能的拓展
其中写在方法中的代码需要用到jdk的动态代理技术,在进入到这个方法中将类加载器,接口,附加代码传入到jdk类中的方法,返回一个代理对象
附加代码用到invocationHandle 接口,实现这个接口其中的方法有三个参数,代理对象,目标方法,方法参数,将想要执行的附加代码写到此方法中,再methinvoke
那么前后就实现了动态代理
cglib代理
代理思想同上,如果一个类没有接口,那就用第三方库cglib,用继承 的方法给它一个代理对象,
其中写在方法中的代码需要用到cglib的代理技术,在进入到这个方法中将类加载器,supperclass,附加代码传入到cglibapi中的类中的方法,返回一个代理对象
附加代码写到xxxx接口,实现这个接口有三个参数 ,代理对象,目标方法,方法参数,让基执行目标类的方法,实现功能的拓展
Aop
如果 我们的业务方法都要实现功能的拓展,都使用如上的方法那太麻烦,所以spring提供了aop技术 它是封装了动态代理
aop的额外代码写在 methodBeforeadvice 方法 前
methodInterceptor 方法 前后
事务
如果 用aop自己实现事务的配置也是很麻烦, spring提供了声明式事务

浙公网安备 33010602011771号