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提供了声明式事务

posted @ 2021-06-19 18:53  JargonFire  阅读(50)  评论(0)    收藏  举报