xml:优点:
缺点:
注解优点:
缺点:
配置和java耦合到一起,修改之后需要重新编译
各个对象之间关系不明确
注解过多,影响代码质量和美观
@Autowired
是什么:注解形式的自动装配==自动注入
怎莫用:
1.写在set方法上,注入方式就是通过set方法注入
2.写在属性上,注入方式就是反射
先通过byType,先通过类型匹配;找不到再使用byName,通过set方法的名字或者参数列表的变量名。
和Autowired一起使用,强制把Autowired改成byName
@Resource
先通过byName去找,先通过set方法名去找,找不到再通过参数列表的变量名去找。
找不到再换成byType去找
1.去配置文件中开启注解支持
2.配置扫描包的路径
3.给需要被spring管理的类上加上@Component或者具有他含义的其他注解
@service 业务处理类
@Repository 数据持久层
@Controller 控制层
@Autowired 自动注入
@Resource 自动注入
完全编程注解开发,去掉了xml配置文件,换成了配置类
configuration,规定某个类为配置类
componentScan 加在配置上,确定扫描包的路径
value
propertySource读取配置文件
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP在Spring中的作用
提供声明式事务;允许用户自定义切面
以下名词需要了解下:
横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …
切面(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。
通知(Advice):切面必须要完成的工作。即,它是类中的一个方法。
目标(Target):被通知对象。
代理(Proxy):向目标对象应用通知之后创建的对象。
切入点(PointCut):切面通知 执行的 “地点”的定义。
连接点(JointPoint):与切入点匹配的执行点。
使用spring实现AOP
- package com.kuang.config;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.After;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Before;
-
- @Aspect
- public class AnnotationPointcut {
- @Before("execution(* com.kuang.service.UserServiceImpl.*(..))")
- public void before(){
- System.out.println("---------方法执行前---------");
- }
-
- @After("execution(* com.kuang.service.UserServiceImpl.*(..))")
- public void after(){
- System.out.println("---------方法执行后---------");
- }
-
- @Around("execution(* com.kuang.service.UserServiceImpl.*(..))")
- public void around(ProceedingJoinPoint jp) throws Throwable {
- System.out.println("环绕前");
- System.out.println("签名:"+jp.getSignature());
- //执行目标方法proceed
- Object proceed = jp.proceed();
- System.out.println("环绕后");
- System.out.println(proceed);
- }
- }
- <bean id="annotationPointcut" class="com.kuang.config.AnnotationPointcut"/>
- <aop:aspectj-autoproxy/>
- javaspring