zoukankan      html  css  js  c++  java
  • Spring容器组建注解@Component和Resouces实现完全注解配置

    @Resource和@Component实现零XML配置  

    1、@Resource的注解:  

    @Resource是J2EE的注解。意思是说在容器里面找相应的资源。也可以通过name属性指定它name的资源。可以注解到field或者setter上面  

    public class UserAction {  

        private UserService userService;  

        @Resource(name="userService")  

        public void setUserService(UserService userService) {  

            this.userService = userService;  

        }  

        public void addUser(){  

            userService.HelloWorld();  

        }  

    }  

    2、@Component  

    @Component和<context:component-scan base-package="com.spring"></context:component-scan>配合实现无XML配置,只通过注解配置及可将类放入资源容器中。  

    案例解析:  

    1、  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-2.5.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd">;      <context:annotation-config/>      <!-- 配置容器资源扫描的包 -->     <context:component-scan base-package="com.spring"></context:component-scan>  </beans>  2、  Java文件:  标注资源的注解@Component。括号里面指定的是存入容器的name属性为userService  那么将来我们拿的时候则getBean(“userService”)即可。如果我们不指定userService它默认存入容器bean的key为userServiceImpl这样就可以得到一个装有UserServiceImpl对象的容器  

    package com.spring.service;  

    import org.springframework.stereotype.Component;  

    import com.spring.dao.UserDao;  

    @Component("userService")  

    public class UserServiceImpl implements UserService{  

        private UserDao userDao;  

        public void init(){  

            System.out.println("init");  

        }  

        public void destory(){  

            System.out.println("destory");  

        }  

        public UserDao getUserDao() {  

            return userDao;  

        }  

        public void setUserDao(UserDao userDao) {  

            this.userDao = userDao;  

        }  

        public void HelloWorld(){  

            System.out.println("helloworld");  

        }  

    }  

    通过@Resource将资源注入进来  

    因为上文已经配置了容器里面的资源。所以我这里将资源通过@Resource注解将资源注入到相关的属性。请看代码:  

    @Component("userAction")  

    public class UserAction {  

        private UserService userService;  

        //它会将beans的xml文件配置加入进去  

        //也可以使用name属性指定byName的指定  

        @Resource(name="userService")  

        public void setUserService(UserService userService) {  

            this.userService = userService;  

        }  

        public void addUser(){  

            userService.HelloWorld();  

        }  

    }  

    测试实现:  

    通过上文配置的userAction案例来得到这个对象然后调用它里面的方法,因为上文通过了@ Component注解将UserAction的对象配置到了容器里面。所以获得容器之后就可以用这种方法getbean即可  

        @Test  

        public void test01(){  

            BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml");  

            UserAction user = (UserAction) applicationContext.getBean("userAction");  

            user.addUser();  

        }  

    @Scope和@PostConstruct、@PreDestroy  

    很简单就相当于前面讲到的作用于和initmethod和destorymethod请看下面代码。不再多说:  

    @Scope("Singleton")  

    @Component("userService")  

    public class UserServiceImpl implements UserService{  

        private UserDao userDao;  

        @PostConstruct  

        public void init(){  

            System.out.println("init");  

        }  

        @PreDestroy  

        public void destory(){  

            System.out.println("destory");  

        }  

        public UserDao getUserDao() {  

            return userDao;  

        }  

        public void setUserDao(UserDao userDao) {  

            this.userDao = userDao;  

        }  

        public void HelloWorld(){  

           System.out.println("helloworld");  

        }  

    }  

  • 相关阅读:
    竞赛中遇到的英文单词集锦
    #复习 搜索与图论:排列数字、走迷宫~ 20.8.20起
    #容斥原理 20.9.10
    #sort :快速排序、第k个数 20.09.12
    #STL #unordered_map : C++11 unordered_map详细介绍
    Java 面试必备(字符串专题)
    JAVA面试必备题(垃圾回收专题)
    Collection框架的结构(面试重点)
    CSS 层级样式表
    window搭建mongodb副本集
  • 原文地址:https://www.cnblogs.com/congcong1024/p/7772046.html
Copyright © 2011-2022 走看看