• 6.装配Bean基于注解


    1.注解:就是一个类,使用@注解名称

    开发中:使用注解 取代 xml配置文件。

    @Component取代<bean class="">
    
    @Component("id") 取代 <bean id="" class="">

    2.web开发,提供3@Component注解衍生注解(功能一样)取代<bean class="">

    @Repository :dao层
    
    @Service:service层
    
    @Controller:web层

    3.依赖注入 ,给私有字段设置,也可以给setter方法设置

    普通值:@Value("")

    引用值:

    方式1:按照【类型】注入
    
    @Autowired
    
    方式2:按照【名称】注入1
    
    @Autowired
    
    @Qualifier("名称")
    
    方式3:按照【名称】注入2
    @Resource("名称")

    4.生命周期

    初始化:@PostConstruct

    销毁:@PreDestroy

    5.作用域

    @Scope("prototype") 多例

     注解使用前提,添加命名空间,让spring扫描含有注解类

    例子一:

    beans.xml

    <?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"
           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">
        <!-- 组件扫描,扫描含有注解的类 -->
        <context:component-scan base-package="com.jd.annotation.ioc"></context:component-scan>
    </beans>
    UserService.java
    package com.jd.annotation.ioc;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:16
     */
    public interface UserService {
        void addUser();
    }
    UserServiceImpl.java
    package com.jd.annotation.ioc;
    
    import org.springframework.stereotype.Component;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:16
     *
     * @Component("id") 取代 <bean id="" class="">
     */
    @Component("userServiceId")
    public class UserServiceImpl implements UserService {
        @Override
        public void addUser() {
            System.out.println("添加用户成功!");
        }
    }
    TestAnnoIoC.java
    package com.jd.annotation.ioc;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:19
     */
    public class TestAnnoIoC {
    
        @Test
        public void testAnnotitaion(){
            String xmlPath="com/jd/annotation/ioc/beans.xml";
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
            UserService userService = (UserService) applicationContext.getBean("userServiceId");
            userService.addUser();
        }
    }

    例子二:

    beans.xml

    <?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"
           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">
        <!-- 组件扫描,扫描含有注解的类 -->
        <context:component-scan base-package="com.jd.annotation.web"></context:component-scan>
    </beans>
    StudentAction.java
    package com.jd.annotation.web;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:25 controller层
     */
    @Controller("studentActionId")
    public class StudentAction {
    
        @Autowired  //默认按照类型
        private StudentService studentService;
    
        public void execute(){
            studentService.addStudent();
        }
    }
    StudentDao.java
    package com.jd.annotation.web;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:28
     */
    public interface StudentDao {
        void save();
    }
    StudentDaoImpl.java
    package com.jd.annotation.web;
    import org.springframework.stereotype.Repository;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:29
     *
     * Repository :dao层
     */
    @Repository("studentDaoId")
    public class StudentDaoImpl implements StudentDao{
        @Override
        public void save() {
            System.out.println("save dao");
        }
    }
    StudentService.java
    package com.jd.annotation.web;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:26
     */
    public interface StudentService {
        void addStudent();
    }
    StudentServiceImpl.java
    package com.jd.annotation.web;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Service;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:27 service层
     */
    @Service
    public class StudentServiceImpl implements StudentService {
    
        private StudentDao studentDao;
    
        @Autowired
        @Qualifier("studentDaoId")
        public void setStudentDao(StudentDao studentDao) {
            this.studentDao = studentDao;
        }
    
        @Override
        public void addStudent() {
            studentDao.save();
    
        }
    }
    TestAnnoWeb.java
    package com.jd.annotation.web;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * @author weihu
     * @date 2018/8/14/014 0:44
     */
    public class TestAnnoWeb {
        @Test
        public void testAnnotion(){
            String xmlPath="com/jd/annotation/web/beans.xml";
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
            StudentAction studentAction = applicationContext.getBean("studentActionId", StudentAction.class);
            studentAction.execute();
        }
    }

    例子三:

    beans.xml

    <?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"
           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">
        <!-- 组件扫描,扫描含有注解的类 -->
        <context:component-scan base-package="com.jd.annotation.other"></context:component-scan>
    </beans>
    UserService.java
    package com.jd.annotation.other;
    
    public interface UserService {
        
        public void addUser();
    
    }
    UserServiceImpl.java
    package com.jd.annotation.other;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Service;
    
    @Service("userServiceId")
    //@Scope("prototype")
    public class UserServiceImpl implements UserService {
    
        @Override
        public void addUser() {
            System.out.println("d_scope add user");
        }
        
        @PostConstruct
        public void myInit(){
            System.out.println("初始化");
        }
        @PreDestroy
        public void myDestroy(){
            System.out.println("销毁");
        }
    
    }
    TestOther.java
    package com.jd.annotation.other;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestOther {
        
        @Test
        public void testBeforeAndAfter(){
            //spring 工厂
            String xmlPath = "com/jd/annotation/other/beans.xml";
            ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
            UserService userService = applicationContext.getBean("userServiceId" ,UserService.class);
            UserService userService2 = applicationContext.getBean("userServiceId" ,UserService.class);
            
            System.out.println(userService);
            System.out.println(userService2);
            
            applicationContext.close();
        }
    
    }
  • 相关阅读:
    网页显示UIWebView(一个)
    借百度数据,建立你自己的程序
    引水数据--紧凑
    Unity3d 实时折射和反射
    snmp监控磁盘
    Linux snmp监控
    20监控工具
    Java 四舍五入
    Oracle主键操作
    SnmpTrap
  • 原文地址:https://www.cnblogs.com/weihu/p/9471994.html
Copyright © 2020-2023  润新知