zoukankan      html  css  js  c++  java
  • spring Annotation

    使用注解替代xml

    在前几章的笔记基础上添加使用注解的形式

    1.配置applicationContext 添加context schema

    <?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: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"
    >
    
    <!-- 注解只需要这一句.指的是组件扫描开始的包,我们就写总包,从这个包及其子包 -->
        <context:component-scan base-package="com.kaishengit"/>
        <!-- aop注解还要添一句 -->
        <aop:aspectj-autoproxy/>
        
    
    </beans>

    2.Bean的注解()

    这三个注解用哪个都一样,但是人为规定dao的用Repository,service的用Service,其他用Component
    @Component(组件)
    @Service(服务)
    @Repository (存储,持久化)

    ---------------------------------------------

    然后这就行了?

    没有这句话啊<bean id="userDao" class="com.kaishengit.dao.UserDao"></bean>
    怎么做到的?注意,默认的就是跟类型相同,首字母小写
    不一样的时候@Repository("xxx")

    @Repository
    public class UserDao implements IUserDao {
    }
    
    @Repository
    @Scope("prototype")// 单例
    public class UserDao implements IUserDao {
    }
    
    @Repository
    @Lazy(true)// lazy
    public class UserDao {}

    =======================================================================

    =======================================================================

    JSR 330 Standard Annotation这个组织 定义了注解@Named好处是sun官方的
    跟上面三个功能一样

    导入javax.inject.jar(源自JavaEE6)
    import javax.inject.Named;

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

    然后就可以使用named代替上面的三个注解

    @Named
    public class UserDao {}

    --------------------------------------------------------
    --------------------------------------------------------

     解决ioc,依赖注入

    IOC Annotation
    @Autowired
    @Inject
    @Resource

    //首先是bean管理 
    @Named
    public class UserService {
    /*依赖注入,首先是byName(,默认属性名首字母小写),找不到就byType,然后不需要写set*/
        @Autowired
        private IUserDao userDao;
        
        public void save() {
            userDao.save();
        }
        
        public void find() {
            userDao.findName();
        }
    
        
    }

    JSR 330就可以用@inject注入
    @Inject
    private UserDao userDao;

    ========================================================

    ========================================================

    aop注解 

    导入jar

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>

    配置中添加一句

    <aop:aspectj-autoproxy/>
    @Aspect//等同于<aop:aspect ref="myAspect">
    @Named
    public class MyAspect {
    /*定义切入点表达式,随便定义一个方法,不需要有内容什么的,主要是能在这个方法上面加注解
            */
        @Pointcut("execution(* com.kaishengit.dao..*.*(..))")
        public void pointcut(){}
        /*指定方法很简单,因为我在哪个方法上面加就是指定哪个方法
             指定接入点表达式就是写上面定义切入点表达式的那个方法*/
        @Before("pointcut()")
        public void beforeAdvice() {
            System.out.println("前置通知....");
        }
        
        @AfterReturning(pointcut="pointcut()",returning="obj")
        public void afterAdvice(Object obj) {
            System.out.println("后置通知..." + obj);
        }
        
        @AfterThrowing(pointcut="pointcut()",throwing="ex")
        public void exceptionAdvice(Exception ex) {
            System.out.println("异常通知..." + ex.getMessage());
        }
        
        @After("pointcut()")
        public void finallyAdvice() {
            System.out.println("最终通知....");
        }
        
        
        
        // 这是环绕通知,用于替代上面四个通知
        @Around("pointcut()")
        public void aroundAdvice(ProceedingJoinPoint jp) {
            
            try {
                System.out.println("前置通知");
                Object obj = jp.proceed();
                System.out.println("后置通知");
            } catch (Throwable e) {
                e.printStackTrace();
                System.out.println("异常通知");
            } finally {
                System.out.println("最终通知");
            }
            
        }
        
  • 相关阅读:
    Xilinx SelectIO资源的使用总结
    Altera usbblaster驱动无法安装的解决办法
    Xilinx FPGA的约束设计和时序分析总结
    OpenMANIPULATORX基本操作
    OpenMANIPULATORX ROS包安装 (Melodic)
    .xacro文件
    open_manipulator OpenCR代码解读
    OpenMANIPULATORX GUI
    ROS建模 urdf
    多机器人Gazebo仿真
  • 原文地址:https://www.cnblogs.com/itliucheng/p/4465231.html
Copyright © 2011-2022 走看看