1、添加支持标注的spring中的jar包:
spring-context.jar
spring-context-support.jar
2、在xml中配置命名空间和schema
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
3、启用基于注解的bean管理和依赖注入DI
<context:component-scan base-package="com.spring1" />
表示,指定的基包以及子包都会纳入到spring的bean管理中。
4、Bean的注解(以下几种均可)
(1)dao里边的类一般用@Repository
(2)service里边的类一般用@Service
(3)其他的用@Component
aa
Spring mvc中的controller里边的类一般用@Controller
@Repository("dao") @Scope("prototype") @Lazy(true) public class UserDao { public String showUser(){ System.out.println("show"); return "你好"; } }
加上了注解,就可以在bean中去掉了。
5、JSR330的注解
需要导入javax.inject.jar
(1)@Named注解,只要加入Named就可以加入bean的管理了。
6、IOC,DI的注解(一下三种选一种均可)
(1)set注入用@AutoWired
@Autowired public void setUserDao(UserDao dao){ this.userDao = dao; }
(2)将@AutoWired加到被注入的属性上边,可以将set方法去掉
@Named public class UserService { @Autowired private UserDao userDao; public void show(){ userDao.showUser(); } }
(3)jsr330中使用@Inject注入方法
@Named public class UserService { @Inject private UserDao userDao; public void show(){ userDao.showUser(); } }
(4)jsr250中使用@Resource注入方法
@Named public class UserService { @Resource private UserDao userDao; public void show(){ userDao.showUser(); } }
7、AOP注解
首先在xml中加入以下内容,加入aspect切面支持。
<aop:aspectj-autoproxy/>
(1)在切面类上首先用@Named注解或者其他的加入Bean管理,再加上@Aspect注解表示切面类
@Aspect @Named public class MyAspect { }
(2)定义切入点表达式,并加入@Pointcut(.......),包,类,方法,参数
@Aspect @Named public class MyAspect { @Pointcut("execution(* com.spring1.dao..*.*(..))") public void pointcut(){} }
(3)定义通知
@Named @Aspect public class MyAspect { @Pointcut("execution(* com.spring1.dao..*.*(..))") public void pointcut(){} @Before("pointcut()") public void beforeAdvise(){ System.out.println("before"); } @AfterReturning(pointcut="pointcut()",returning="o") public void afterReturningAdvise(Object o){ System.out.println("after return"); } @After("pointcut()") public void afterAdvise(){ System.out.println("finally"); } @AfterThrowing(pointcut="pointcut()",throwing="e") public void afterThrowningAdvise(Exception e){ System.out.println("throwning"); } }
(3)仅定义环绕通知
@Named @Aspect public class MyAspect { @Pointcut("execution(* com.spring1.dao..*.*(..))") public void pointcut(){} @Around("pointcut()") public void aroundAdvise(ProceedingJoinPoint pjp){ try{ System.out.println("after"); Object object = pjp.proceed(); System.out.println("after returning"); }catch(Throwable e){ System.out.println("after throwning"); }finally{ System.out.println("after"); } } }