您的位置:首页 > 移动开发

Spring 注解方式配置app:

2016-04-23 14:30 375 查看
注解配置AOP(使用 AspectJ 类库实现的),大致分为三步:
1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before, @AfterReturning,@After,@AfterThrowing,@Around).
2. 开发需要被拦截的类。
3. 将切面配置到xml中,当然,我们也可以使用自动扫描Bean的方式。这样的话,那就交由Spring AoP容器管理。
另外需要引用 aspectJ 的 jar 包: aspectjweaver.jar aspectjrt.jar

1 实体类:
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2 dao 接口类:
package com.bjsxt.dao;
import com.bjsxt.model.User;

public interface UserDAO {
public void save(User user);
}

3 dao 实现类
@Component("u")
public class UserDAOImpl implements UserDAO {

public void save(User user) {

System.out.println("user save11d!");
/*throw new RuntimeException("exception");*/ //抛异常
}

}

4 service 服务类
@Component("userService")
public class UserService {

private UserDAO userDAO;

public void init() {
System.out.println("init");
}

public void add(User user) {
userDAO.save(user);
}
public UserDAO getUserDAO() {
return userDAO;
}

@Resource(name="u")
public void setUserDAO( UserDAO userDAO) {
this.userDAO = userDAO;
}

public void destroy() {
System.out.println("destroy");
}
}

现在要对service 进行 aop 操作。

5 切面类:

@Aspect
@Component
public class LogInterceptor {
@Pointcut("execution(public * com.bjsxt.service..*.add(..))")
public void myMethod(){};

@Before("myMethod()")
public void before() {
System.out.println("method staet");
}
@After("myMethod()")
public void after() {
System.out.println("method after");
}
@AfterReturning("execution(public * com.bjsxt.dao..*.*(..))")
public void AfterReturning() {
System.out.println("method AfterReturning");
}
@AfterThrowing("execution(public * com.bjsxt.dao..*.*(..))")
public void AfterThrowing() {
System.out.println("method AfterThrowing");
}
}
解释类:

1 : 定义一个 切点,名字是myMethod.
@Pointcut("execution(public * com.bjsxt.service..*.add(..))")
public void myMethod(){};
对应xml 配置: <aop:pointcut id="myMethod" expression="execution(public * com.bjsxt.service..*.add(..))" />

2 在myMethod切点执行之后,调用after 方法。
@After("myMethod()")
public void after() {
System.out.println("method after");
}
对应XML 配置:
<aop:after pointcut-ref="myMethod" method="after"/>

3 在切点 execution(public * com.bjsxt.dao..*.*(..)) 返回后,执行AfterReturning 方法。

@AfterReturning("execution(public * com.bjsxt.dao..*.*(..))")
public void AfterReturning() {
System.out.println("method AfterReturning");
}

对应 XML :

<aop:after-returning pointcut="execution(public * com.bjsxt.dao..*.*(..)) " method="afterReturning"/>

spring 配置文件。

<context:annotation-config />
<context:component-scan base-package="com.bjsxt"/> <!-- 自动扫描 -->
<aop:aspectj-autoproxy/> <!-- 要添加本行 -->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: