18.01.23,web学习第四十四天,还有半年,努力吧青年 Spring第二天 sts+cglib+aop+注解编程
44.Spring第二天
1.复习
1)Scope默认值: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文档当中只允许有一个空的命名空间 4)开启使用注解代理配置文件(指定扫描该包下的所有类的注解,会扫描该包的所有子孙包)。 <context:component-scan base-package=”包名”></context:component-scan> 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方法上使用的是封装了的方法。 8)private Car car;赋值 首先需要使用注解将Car放入到容器中(@component(“car”))。然后在字段上加注解@autowired 这个注解会在容器中寻找相同的类型进行匹配。如果容器中有多个相同类型的对象,它将无法选择。可以再添加一个注解@qualifier(“name”); 不推荐以上两个注解一起使用,可以使用以**解直接指定注入哪个对象。@resource(name=”car”) 9)配置对象的初始化和销毁方法: @postConstruct @preDestroy 当对象配置为prototype时每次new 一个新对象,那么就不会有完整的生命周期。 |
3.Spring中安装sts插件
使用已装好的带sts插件的eclipse |
4. Spring与junit整合测试
1)导包4+2+aop+test 2)因为spring的配置文件位置是随意的,所以每次创建容器都得指定位置。 |
5.Spring的aop思想
1)横向重复,纵向抽取 举例动态代理:Proxy.newProxyInstance(classLoader,Interface[],InvocationHandler handler); 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.Spring的aop准备——导包+定义通知
2)准备目标对象 3)准备通知(类+方法) 有五种: 前置通知:目标方法运行之前调用。 后置通知:目标方法运行之后调用(出现异常不调用)。 环绕通知:在目标方法之前和之后都调用。(有参数比较特殊) 异常拦截通知:如果出现异常,就会调用。 后置通知:无论是否出现异常,都会调用,之后调用。 4)配置将通知织入目标对象 需导入新的约束:aop约束(命名空间) 配置目标对象: <bean class =”” name=””></bean> 配置通知对象: <bean name=”’ class=””></bean> 配置将通知织入目标对象: |
7.Spring的aop总结
Aop面向切面编程思想 Spring aop开发:内部封装了动态代理和cglib代理。 |
8. Spring的aop注解配置(了解)_