• 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");  

        }  

    }  

  • 相关阅读:
    黑板客爬虫闯关 代码
    新浪云SAE搭建python环境 问题拾遗
    关于python中的字符串编码理解
    linux环境中使用转义字符使命令行字符颜色高亮
    python中list作为全局变量无需global声明的原因
    获取youku视频下载链接(wireshark抓包分析)
    改变linux默认配色方案(dircolors和dircolors-solarized使用)
    限流常规设计和实例
    连接池-Mybatis源码
    Transaction-Mybatis源码
  • 原文地址:https://www.cnblogs.com/congcong1024/p/7772046.html
Copyright © 2020-2023  润新知