18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

44.Spring第二天

1.复习

1Scope默认值:singleton,创建容器时会立即创建单例对象

Prototype:多例,每次获得对象,才会创建对象,并且每次创建新的对象。

2)Bean的构造方式:

空餐构造、静态工厂、实例工厂、

3)注入方式

Set注入,构造方法注入,

4)复杂属性注入

5)在web中使用Spring容器

导包、web.xml配置Listener=>ContextLoaderListener

配置参数指定Spring配置路径

Action中获得容器

webapplicationContextUtils.getWebApplicationContext(ServletContext sc);

2. 使用注解配置Spring

1)导入约束spring-context-4.2.xsd(为主配置文件导入新的命名空间(约束))。

2)需要在必备的包的基础上再导一个aop包。

3)一个xml文档当中只允许有一个空的命名空间

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

4)开启使用注解代理配置文件(指定扫描该包下的所有类的注解,会扫描该包的所有子孙包)

<context:component-scan base-package=”包名”></context:component-scan>

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

5)在类中使用注解完成配置:

<bean name=”user” class=””>———@component(“user”)

为了体现分层效果做区分出现以下三个不同的注解(本质相同)

@Service(“”)service

@Controller(“”)web

@Repository(“”)Dao//仓库贮藏室

6)配置是否单例:

@scope(scopeName=”prototype”)以上均配置在类上

7)关于属性的注入:(配置在成员位置)

Private String name;

配置name=tom有两种选择直接注解加在成员变量上,@value(tom),或者是加在set方法上。

记住@value(tom);是给value属性赋值。

区别:效果一样,原理不同,直接在字段上加注解使用的是反射直接赋值,加在set方法上使用的是封装了的方法。

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

8)private Car car;赋值

首先需要使用注解将Car放入到容器中(@component(“car”))。然后在字段上加注解@autowired

这个注解会在容器中寻找相同的类型进行匹配。如果容器中有多个相同类型的对象,它将无法选择。可以再添加一个注解@qualifier(“name”);

不推荐以上两个注解一起使用,可以使用以**解直接指定注入哪个对象。@resource(name=”car”)

9)配置对象的初始化和销毁方法:

@postConstruct

@preDestroy

当对象配置为prototype时每次new 一个新对象,那么就不会有完整的生命周期。

18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

3.Spring中安装sts插件

使用已装好的带sts插件的eclipse

4. Springjunit整合测试

1)导包4+2+aop+test

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

2)因为spring的配置文件位置是随意的,所以每次创建容器都得指定位置。

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

5.Springaop思想

1)横向重复,纵向抽取

举例动态代理:Proxy.newProxyInstance(classLoader,Interface[],InvocationHandler handler);

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

2)动态代理和cglib代理

Cglib第三方技术,可以对任何类生成代理,原理是对目标对象进行继承代理,如果目标对象被final修饰,那么无法使用cglib代理。

Spring对两种代理的选择:动态代理优先选择,如果不存在接口,选择cglib

3)enhancer增加者,增强者。

Cglib底层大致原理:Enhancer e=new Enhancer();//帮助生成代理对象

4)Spring  aop名词学习

joinPoint(连接点):目标对象中,所有可以增强的方法。

PointCut(切入点):目标对象,已经增强的方法。

Advice(通知|增强):增强的代码

Target(目标对象):被代理的对象。

Weaving(织入):将通知应用到切入点的过程。

Proxy(代理):形成的代理对象

Aspect(切面):切入点+通知。

6.Springaop准备——导包+定义通知

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

2)准备目标对象

3)准备通知(类+方法)

有五种:

前置通知:目标方法运行之前调用。

后置通知:目标方法运行之后调用(出现异常不调用)。

环绕通知:在目标方法之前和之后都调用。(有参数比较特殊)

异常拦截通知:如果出现异常,就会调用。

后置通知:无论是否出现异常,都会调用,之后调用。

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

4)配置将通知织入目标对象

需导入新的约束:aop约束(命名空间)

配置目标对象:

<bean class =”” name=””></bean>

配置通知对象:

<bean name=”’ class=””></bean>

配置将通知织入目标对象:

 18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程

7.Springaop总结

Aop面向切面编程思想

Spring  aop开发:内部封装了动态代理和cglib代理。

8. Springaop注解配置(了解)_