zoukankan      html  css  js  c++  java
  • spring 注解

    1.Required (在编译时检查作用,不会给你注入)

    This annotation simply indicates that the affected bean property must be populated at configuration time

    也就是说:需要注入的类在配置的就得配置好,Required只是检查需要注入的类又没有注入,没有就会出错

    例如配置文件这样:

    <bean id="u" class="com.spring.dao.impl.UserDAOImpl"></bean>
    
    <bean id="userService" class="com.spring.service.UserService">
    <!-- <property name="userDAO" ref="u"></property> 需要注入一个参数-->
    </bean>
    

     这时如果你要是这样启动服务:就会报错

             @Required  //检查是否注入
    	public void setUserDAO( UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    

     但是如果这样:就不会报错,应该autowired 先给程序注入,required再去检查是否成功注入

            @Required   //检查是否注入
     	@Autowired  //注入
    	public void setUserDAO( UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    

     2.Autowired(自动注入)  默认是按照类型注入

     <1>如上例中的配置文件,调用服务时只需要这样调用

            @Autowired
    	public void setUserDAO( UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    

     <2>如果配置中存在两个相同类型的bean如:

    <bean id="u" class="com.spring.dao.impl.UserDAOImpl"></bean>
    <bean id="u2" class="com.spring.dao.impl.UserDAOImpl"></bean>
    <bean id="userService" class="com.spring.service.UserService">
    <!-- <property name="userDAO" ref="u"></property> 需要注入一个参数-->
    </bean>
    

     这个时候如果单独用上面的配置是会报错的,因为配置中有两个相同类型的bean,这时我们要指定bean的标志(bean的名字)

             @Required   //j检测是否注入
    	@Autowired //注入      //Qualifier 指定name的bean
    	public void setUserDAO(@Qualifier(value="u") UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    

     <3>Autowired 还可以这样用@Autowired(@required=false)  表示不需要自动装载

    <4>autowired 可以写在setter方法,一般方法,属性上,还可以注入数据类型,map类型等,参考API文档

    3.Qualifier和Autowired结合

    4.Resource指定注入的bean   默认先按名称注入,没有就按类型(import javax.annotation.Resource)需要导入common-annotations.jar

    <bean id="userDAO" class="com.spring.dao.impl.UserDAOImpl"></bean>
    <bean id="u2" class="com.spring.dao.impl.UserDAOImpl"></bean>
    <bean id="userService" class="com.spring.service.UserService">
    <!-- <property name="userDAO" ref="u"></property> 需要注入一个参数-->
    </bean>
    

    业务调用:

            @Resource//默认按userDAO找配置
      	public void setUserDAO( UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    

    也可以这样:

            @Resource(name="u2") //指定名字
      	public void setUserDAO( UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    

     5.Component 不用再xml中配置每个bean,只需要在配置文件中配置

      <!--利用注解形式,并声明初始化容器时扫描的包 -->
        <context:annotation-config/>
       <context:component-scan base-package="com.spring">
       </context:component-scan> 
    

     在类中:

    @Component("userDAO")  //自动将类生成对象加到容器中,默认时key是userDAOImpl
    public class UserDAOImpl implements UserDAO {
    
    	@Override
    	public void add(User user) {
    		// TODO Auto-generated method stub
    		System.out.println("user added successful");
    	}
    }
    
    @Component
    public class UserService {
    	private UserDAO userDAO;
    
    	public UserDAO getUserDao() {
    		return userDAO;
    	}
    	@Resource
    	public void setUserDAO( UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
    
    	public void add(User user) {
    		userDAO.add(user);
    	}
    
    }
    

     测试类

    @Test
    	public void jDomTest() throws JDOMException, IOException
    	{
    		ApplicationContext context=new ClassPathXmlApplicationContext("classpath*:beans.xml");
    		UserService service=(UserService)context.getBean("userService");
    		service.add(new User());
    	}
    

     说明:beans.xml配置文件指定扫描com.spring 包下的所有类,并将所有在类头加油“Component”的类都生成对象放到集合中

      <context:annotation-config/>
       <context:component-scan base-package="com.spring">
       </context:component-scan>

  • 相关阅读:
    BZOJ4827: [Hnoi2017]礼物(FFT 二次函数)
    洛谷P3586 [POI2015]LOG(贪心 权值线段树)
    BZOJ4373: 算术天才⑨与等差数列(线段树 hash?)
    cf711D. Directed Roads(环)
    洛谷P3313 [SDOI2014]旅行(树链剖分 动态开节点线段树)
    洛谷P2045 方格取数加强版(费用流)
    cf900D. Unusual Sequences(容斥 莫比乌斯反演)
    agc007D
    hdu 4287Intelligent IME(简单hash)
    Python Post and Get 登陆web后台系统并抓取页面
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3496463.html
Copyright © 2011-2022 走看看