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

    1、IOC注解

      1.1 IOCDI的注解

            IOC:

          @Component:实现Bean组件的定义

          @Repository:用于标注DAO类,功能与@Component作用相当

          @Service:用于标注业务类

          @Controller:用于标注控制器

          DI:

          @Resource(name="userService")默认ByName方式,如果name确实默认按照ByType方式注入

          @Autowired,默认ByType方式,如果出现同名类,则不能按照Type进行注入,需要使用@Qualifier 指明ID

      1.2 IOC注解实现添加用户案例

      (1)实体类

    package cn.spring.ioc.entity;
    
    import java.io.Serializable;
    
    public class UserInfo implements Serializable {
        private Integer user_id;
        private String user_name;
    
        public Integer getUser_id() {
            return user_id;
        }
    
        public void setUser_id(Integer user_id) {
            this.user_id = user_id;
        }
    
        public String getUser_name() {
            return user_name;
        }
    
        public void setUser_name(String user_name) {
            this.user_name = user_name;
        }
    }
    
     

      (2)ApplicationContext.xml

        (最好先去完成ApplicationContext配置文件,以免忘记)

    <!--扫描注解:包扫描器-->
    <context:component-scan base-package="cn.spring"></context:component-scan>

        (3)IUserInfoMapper接口

    package cn.spring.ioc.mapper;
    
    import cn.spring.ioc.entity.UserInfo;
    
    public interface IUserInfoMapper {
        public int addUser(UserInfo info);
    }

      (4)IUserInfoMapperImpl接口实现类

    package cn.spring.ioc.mapper.impl;
    
    import cn.spring.ioc.entity.UserInfo;
    import cn.spring.ioc.mapper.IUserInfoMapper;
    import org.springframework.stereotype.Repository;
    
    /**
     * dao层标识  @Repository
     */
    @Repository
    public class IUserInfoMapperImpl implements IUserInfoMapper {
    
        @Override
        public int addUser(UserInfo info) {
            System.out.println("添加成功!");
            return 1;
        }
    }
    
     

      (5)IUserInfoService

    package cn.spring.ioc.service;
    
    import cn.spring.ioc.entity.UserInfo;
    
    public interface IUserInfoService {
        public int addUser(UserInfo info);
    }

      (6)IUserInfoServiceImpl实现类

    package cn.spring.ioc.service;
    
    import cn.spring.ioc.entity.UserInfo;
    
    public interface IUserInfoService {
        public int addUser(UserInfo info);
    }

      (7)测试类

    package cn.spring;
    
    import cn.spring.ioc.entity.UserInfo;
    import cn.spring.ioc.service.IUserInfoService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class IocTest {
        public static void main(String[] args) {
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    
            IUserInfoService bean = (IUserInfoService)context.getBean("iUserInfoServiceImpl");
            bean.addUser(new UserInfo());
        }
    }

      (8)控制台

          

    2、AOP注解

      2.1 实现AOP的注解

        @Aspect 声明切面

        @Ponitcut 声明公共的切点表达式

        @Before 前置增强

        @AfterReturning 后置增强

        @Around 环绕增强

        @AfterThrowing 异常抛出增强

        @After 最终增强

      2.2  AOP注解实现前后置增强

      (1IdoSomeService

    package cn.spring.aop;
    
    import org.springframework.stereotype.Service;
    
    /**
     * 业务类
     */
    @Service("idoSomeService")
    public class IdoSomeService {
        public void doSome(){
            System.out.println("业务类当中的doSome方法");
        }
        public void say(){
            System.out.println("业务类当中的say方法");
        }
    }

      (2MyAdvice增强类

    package cn.spring.aop;
    
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    /**
     * 增强类,把增强类注入到Spring容器
     */
    @Aspect
    @Component
    public class MyAdvice {
        //定义一个空方法,为了可以应用切点表达式
        @Pointcut("execution(* *..aop.*.*(..))")
        public void pointCut(){}
    
        //自定义增强方法
        @Before("pointCut()")
        public void before(){
            System.out.println("=====前置增强=====");
        }
    
        //自定义增强方法
        @AfterReturning("pointCut()")
        public void after(){
            System.out.println("=====后置增强=====");
        }
    }

      (3)applicationContext.xml配置文件

    <!--扫描注解:包扫描器-->
    <context:component-scan base-package="cn.spring"></context:component-scan>
    
    <!--开启AOP注解支持-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

      (4)测试类

    package cn.spring;
    
    import cn.spring.aop.IdoSomeService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AopTest {
        public static void main(String[] args) {
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            IdoSomeService idoSomeService = (IdoSomeService)context.getBean("idoSomeService");
            idoSomeService.doSome();
            idoSomeService.say();
        }
    }

          (5)控制台

       

       

  • 相关阅读:
    jetbrains 官网进不去以及webstorm、node下载慢的问题
    因为后端 xss 全局过滤器导致的 jquery ajax post 提交的数据全部为null的问题
    华为jdk镜像地址
    shiro解决两个请求的sessionId相同,但是某一个传入sessionId之后找不到session的原因
    推荐一个好的webapp的服务,支持android/ios/小程序打包,集成了大量本地api
    对前后端分离的一些经验记录
    「caffe编译bug」python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory
    「caffe编译bug」 undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11
    「caffe编译bug」.build_release/lib/libcaffe.so: undefined reference to cv::imread
    python的sorted函数对字典按value进行排序
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/11776843.html
Copyright © 2011-2022 走看看