使用注解实现IOC与AOP的配置

之前我们配置IOC(控制反转)都是在xml中配置,现在通过注解配置IOC会减少很多代码

  @Repository:用于标注DAO类

  @Service:用于标注业务类

  @Controller:用于标注控制器类

例:  

@Repository("userDao")
public class IUserMapperImpl implements IUserMapper {
    @Resource(name="sqlSessionTemplate")
    private SqlSessionTemplate s;
    @Override
    public List<SMBMS_USER> QueryAll() {
        return s.getMapper(IUserMapper.class).QueryAll();
    }

}

这是DAO中的一个实现类,我们使用@Repository("别名")如果不写,默认是类名,首字母小写,将我们的IUserMapperImpl类注入到bean中

同样当类的属性需要引用Bean时,通过@Resource(name=“bean中的id”)来实现引用

在业务逻辑层我们需要引用IUserMapperImpl时:

  

@Service("userService")
public class IUserServiceImpl implements IUserService {
    @Resource(name="userDao")
    private IUserMapperImpl u;
    @Override
    public List<SMBMS_USER> QueryAll() {
        return u.QueryAll();
    }

}

通过@Service(“别名”)来讲业务逻辑层的类注入到bean,我们业务逻辑层引用IUserMapperImpl时通过@Resources(“bean的id”)来引用

当然xml还是需要配置的:

<context:component-scan base-package="cn.bdqn.*" />

在配置文件中加入这一行代码就行了,表示扫描注解标注的类 属性:base-package:表示扫描的范围

2.通过注解实现AOP配置,之前我们配置增强时除了编写增强类,还要在xml配置文件里通过aop:config等标签进行配置

当用注解来实现是就简单多了

//通过这两个标签进行注入
@Aspect
@Component("advice")

public class ServiceAdvice {
    private Logger log=Logger.getLogger(ServiceAdvice.class);
    //定义切点
    @Pointcut("execution(* cn.bdqn.service..*.*(..))")
    public void p1(){
        
    }
    
    //前置增强  value后跟上切点名
    @Before(value="p1()")
    public void before(JoinPoint j)
    {
        String methodName=j.getSignature().getName();
        String className=j.getTarget().getClass().getName();
        log.info(className+"===="+methodName);
    }
    //后置增强
    @AfterReturning(pointcut="p1()")
    public void afterreturning(JoinPoint j){
        String methodName=j.getSignature().getName();
        String className=j.getTarget().getClass().getName();
        log.info(className+"===="+methodName);
    }
}

编写完增强类后再配置文件上加上:

<aop:aspectj-autoproxy/>表示启用对@Aspectj的支持