day38 17-Spring的Bean的属性注入:注解方式

这个类已经可以由Spring控制反转了,那么属性呢?属性分为普通属性和对象属性两部分。

 

JSR是一个组织,和W3C一样是定义一些标准的.它里面也定义了一歌注解,Spring对这个注解也是支持的.其实这个@Resource注解和@AutoWired以及@Qualifier整合到一起它俩的功能是类似的。


package cn.itcast.spring3.demo1;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 注解的方式装配Bean.
 * @author zhongzh
 *
 */
//在Spring配置文件中<bean id="userService" class="cn.itcast.demo1.UserService">
//其实也需要核心配置文件,只不过不是用来装配bean了,你得告诉Spring需要去哪些包下面去扫描.它得扫描到这些注解才行.它得去哪里扫描你得告诉人家才行
//@Component(value="userService")
//@Component("userService")
@Service(value="userService")//Service层,默认把这个类UserService交由Spring来管理了
public class UserService {
    //如果是普通属性,可以使用value注解来注入了
    @Value(value="itcast")
    private String info;
    //@Autowired//如果是复杂类型或者是对象属性使用@Autowired这个注解:自动装配默认使用类型注入.
    //@Autowired(required=false)//AutoWired的属性required=false忽略异常。默认required=true出异常就终止了.required=false依然可以注入,但是出异常的话注入的是null值.
    //required属性出异常不管了,required=false出异常程序照样往下执行,成不成功另外说了.默认required=true,有异常就不注入就停止了.
    //@Qualifier("userDao")
    //@Autowired(required=true)//默认,一般不去改这个值
    //@Qualifier("uDao")//按名称注入,@AutoWired+@Qualifier()
    @Resource(name="userDao")//等于@AutoWired+@Qualifeied,按名称注入
    private UserDao userDao;
     public void sayHello(){
         
         //System.out.println("Hello Spring Annotation.....");
         System.out.println("Hello Spring Annotation....."+info);
     }
    @Override
    public String toString() {
        return "UserService [info=" + info + ", userDao=" + userDao + "]";
    }
     
}
package cn.itcast.spring3.demo1;

//import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;


//Dao这个类正常也应该交由Spring管理.
//@Component
//@Repository//按类型注入
@Repository("userDao")//按名称注入

public class UserDao {

}
package cn.itcast.spring3.demo1;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

//注解的方式:都是将类装载到容器中.
public class SpringTest1 {
   @Test
   public void demo1(){
       
      ApplicationContext  applicationContext  = new ClassPathXmlApplicationContext("applicationContext.xml");
      UserService userService = (UserService) applicationContext.getBean("userService");
      //userService.sayHello();
       System.out.println(userService);
   }
    
    
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- 基于注解的开发需要引入context命名空间。它就是用来配置去扫描哪些包的. -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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:annotation-config></context:annotation-config><!-- XML和注解混搭的时候用的 -->
<!-- 告诉Spring你要扫描哪些包下的东西 -->
<!--  
<context:component-scan base-package="cn.itcast.spring3.demo1">

-->
<context:component-scan base-package="cn.itcast.spring3.demo1"><!-- 纯注解用扫描的就行 -->











</context:component-scan>



</beans>
原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6727959.html