zoukankan      html  css  js  c++  java
  • 注解方式实现IOC和AOP

     3.1 IOC和DI的注解

          IOC:

    • @Component:实现Bean组件的定义
    • @Repository:用于标注DAO类,功能与@Component作用相当
    • @Service:用于标注业务类
    • @Controller:用于标注控制器

          DI:

    •  @Resource(name="id") 默认ByName方式,如果name确实默认按照ByType方式注入
    •  @Autowired默认ByType方式,如果出现同名类,则不能按照Type进行注入需要使用@Qualifier 指明ID

     AOP:

    • @Aspect 声明切面
    • @Ponitcut 声明公共的切点表达式
    • @Before 前置增强
    • @AfterReturning 后置增强
    • @Around 环绕增强
    • @AfterThrowing 异常抛出增强
    • @After 最终增强

    使用注解方法实现AOP的案例

    第一步:xml文件中配置包扫描器和开启Spring对AOP注解的支持

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
        <!--开启Spring IOC的注解支持 base-package 包扫描语句 com.yjc包下的注解-->
        <context:component-scan base-package="com.yjc"/>
        <!--开启Spring AOP注解的支持-->
        <aop:aspectj-autoproxy/>
    </beans>

    第二步:创建业务类

    package com.yjc.annotate;
    
    import org.springframework.stereotype.Service;
    
    @Service("doSomeServiceImpl")//把此类放入到spring容器中,标识这是个Service
    public class DoSomeServiceImpl  {
    
        public void doSome() {
            System.out.println("doSome===============================");
        }
    
    
        public void say() {
            System.out.println("say==========================================");
        }
    }
    package com.yjc.annotate;
    
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.aop.AfterReturningAdvice;
    import org.springframework.aop.MethodBeforeAdvice;
    import org.springframework.stereotype.Component;
    
    import java.lang.reflect.Method;
    @Aspect   //表示这个类是一个切面类
    @Component  //必须要把切面类也放入到Bean容器当中
    public class AnnotateAdvice {
       //定义切点,方法不需要实现 @Pointcut(
    "execution(* com.yjc.annotate.*.*(..))") public void poincut(){ }
      //参数为切点 @Before(
    "poincut()") public void Before(){ System.out.println("俺是前置增强"); } /* @AfterReturning public void AfterReturning(){ System.out.println("俺是后置增强"); } @After("poincut()") public void After(){ System.out.println("额是最终增强"); } @Around("poincut()") public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("前置"); proceedingJoinPoint.proceed(); System.out.println("后置"); }*/ /* @AfterThrowing(pointcut = "poincut()", throwing = "e") public void execption(JoinPoint joinPoint,RuntimeException e){ System.out.println(joinPoint.getSignature().getName()+"方法发生:"+e); }*/ }

    第四步:测试类

    package com.yjc.annotate;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AnnotateTest {
        public static void main(String[] args) {
            ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/yjc/annotate/application_annotate.xml");
          //获取Service层的Bean对象 DoSomeServiceImpl proxyFactory
    = applicationContext.getBean("doSomeServiceImpl", DoSomeServiceImpl.class); proxyFactory.doSome(); proxyFactory.say(); } }

    第五步:测试

    上面的一个小例子就是用我们注解实现IOC声明和AOP的增强,五种增强的实现方式大致一样,这里就不再赘述

  • 相关阅读:
    Qt5.3中qml ApplicationWindow设置窗口无边框问题
    解决qt5在ubuntu下无法调用fcitx输入中文的问题
    qt4.8中多线程的几种方式
    qt5.2.1在linux下去除最大化和最小化按钮
    最近玩了一下qt5.2.1,顺着写点东西,关于这个版本设置程序主窗口居中
    控制台小游戏-贪吃蛇,c++和c#版
    数据库锁机制(一)——概述
    jQuery插件编写学习+实例——无限滚动
    通过错误处理来理解三次握手和四次挥手
    发现一个木马
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/11778216.html
Copyright © 2011-2022 走看看