2018.12.22 Spring学习02

Spring框架注解配置与测试
本文详细介绍了Spring框架中使用注解进行配置的方法,包括引入命名空间、开启注解代理、对象注册与作用范围设置、值类型及引用对象类型注入等。同时,探讨了Spring与JUnit的整合测试,以及Spring AOP的概念与实现原理。

Spring学习02

1.使用注解配置Spring

1.1 为主配置文件引入新的命名空间(约束)

添加约束文件xxx-xxx-context.xml
1231979-20181223093112397-2109080059.png

添加到主配置文件中
1231979-20181223093416750-1809894992.png

选择刚才的context.xml文档
1231979-20181223093606850-695533961.png

记住:一个xml文档只能有一个命名空间(昨天的命名空间是空的) 只需要写最后一个单词作为命名空间就可以了
1231979-20181223093747817-1865168361.png

1.2 开启使用注解代理配置文件

1231979-20181223094648760-971343749.png

1.3 在类中使用注解完成配置

1231979-20181223100221466-297429654.png

1.4 编写测试类进行Junit测试

1231979-20181223095552061-1303246541.png
1231979-20181223095612882-962717704.png

解决办法
1231979-20181223095636615-424172218.png

重新运行
1231979-20181223100436211-1468755429.png

1.5 将对象注册到容器中

1231979-20181223100708939-1800956050.png

1.6 如何指定对象的作用范围 (scope注解)

1231979-20181223102026317-865749717.png

默认值属性singleton
1231979-20181223102100946-1944948443.png

1.7 给对象赋值 (Value注解注入)

1.7.1 值类型注入

1.在成员变量上面添加Value
1231979-20181223101754658-1016285066.png

2.在set方法上面添加Value(推荐使用)
1231979-20181223102243983-1463137663.png

以上是值类型注入的两种方式。第一种是通过反射的Field赋值,第二种是set方法赋值。技术上来说第一种破坏了对象的封装性,但是大家都习惯加在成员变量上面

1.7.2 引用对象类型注入

在Car对象上注入注解 Component,并且添加Value赋值
1231979-20181223103305676-1357185593.png

第一种注入方式。@Autowired
1231979-20181223104947024-666778284.png

在配置文件中添加第二辆车
1231979-20181223104745015-1984339357.png

测试第一种方式发现无法输出第二辆车的信息输出
1231979-20181223104851120-1648361131.png

第二种注入方式。@Autowired @Qualifier("car2") 需要两个一起结合使用
1231979-20181223105339187-645493389.png

第三种注入方式。@Resource(name="car2")
1231979-20181223105759937-1305705835.png

1.7.3 指定注入初始化/销毁方法

1231979-20181223111024718-1366350610.png

@PostConstruct //在对象创建后调用 init-method
@PreDestroy //在对象销毁之前调用 destroy-method

测试
1231979-20181223110931291-1066644014.png

修改后二次测试
1231979-20181223111303719-1457125751.png

2.STS插件安装

查看详细的教程
https://www.cnblogs.com/qichunlin/p/10159524.html

3. spring与junit整合测试

3.1 导包 4+2+aop+test

1231979-20181223130133261-1997655962.png

在测试类中添加注释 @RunWith(SpringJUnit4ClassRunner.class)
1231979-20181223130251221-459048837.png
1231979-20181223130519646-990583706.png

在添加一个注释 @ContextConfiguration("classpath:applicationContext.xml")
1231979-20181223130707171-2060049096.png

测试
1231979-20181223132239157-1230514950.png

3.spring中的AOP

3.1思想 介绍

第一次---拦截器(乱码处理)
1231979-20181223132705806-881838942.png

第二次---事务管理(通过动态代理方式解决)
1231979-20181223133434550-1236404658.png

第三次---Action中参数赋值校验是否登陆
1231979-20181223133637363-1521857731.png

3.2 spring中的aop概念

Spring能够为容器中管理的对象生成动态代理对象
以前我们要使用动态代理对象,我们需要自己调用下面的这个方法,Proxy.newProxyInstance(xx,xx,xx)
spring能够帮我们生成代理对象 (重点)

3.3 spring实现aop的原理

3.3.1 动态代理(有接口,优先使用)
被代理对象必须要实现接口,才能产生代理对象。如果没有接口将不能使用动态代理

1231979-20181223144404061-1431266195.png

1231979-20181223144459698-937243501.png

1231979-20181223144741989-1372238285.png

测试
1231979-20181223144319549-1378714259.png

3.3.2 cglib代理(没有接口)
第三方代理技术,cglib代理可以对任何类生成代理,代理的原理是对目标对象进行继承代理。如果目标对象呗final修饰,那么该类无法被cglib代理

1231979-20181223145049454-696274928.png

测试
1231979-20181223145501339-328012053.png

转载于:https://www.cnblogs.com/qichunlin/p/10163961.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值