第一步:修改applicationContext.xml
添加<
context:annotation-config
/>
表示告訴Spring要用注解的方式進行配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xsi:schemaLocation=" 8 http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 10 http://www.springframework.org/schema/aop 11 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 12 http://www.springframework.org/schema/tx 13 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 14 http://www.springframework.org/schema/context 15 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 16 17 <context:annotation-config/> 18 <bean name="category" class="com.spring.cate.Category"> 19 <property name="name" value="category 3333" /> 20 </bean> 21 <bean name="product" class="com.spring.cate.Product"> 22 <property name="name" value="product 3333" /> 23 </bean> 24 25 </beans>
第二步:在Product.java的category屬性前加上@Autowired注解
1 package com.spring.cate; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 5 6 public class Product { 7 private int id; 8 private String name; 9 @Autowired 10 private Category category; 11 12 public int getId() { 13 return id; 14 } 15 16 public void setId(int id) { 17 this.id = id; 18 } 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 public Category getCategory() { 29 return category; 30 } 31 32 public void setCategory(Category category) { 33 this.category = category; 34 } 35 }
第三步:測試
1 package com.spring.test; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import com.spring.cate.Product; 7 8 public class TestSpring { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" }); 13 Product p = (Product) context.getBean("product"); 14 System.out.println(p.getName()); 15 System.out.println(p.getCategory().getName()); 16 } 17 18 }
第四步:除了前面的在屬性前加@Autowired這種方式外,也可以在setCategory方法前加上@Autowired,這樣來達到相同的效果
第五步:除了@Autowired之外,@Resource也是常用的手段
1 package com.spring.cate; 2 3 import javax.annotation.Resource; 4 5 //@Component("product") 6 public class Product { 7 private int id; 8 // private String name = "product1"; 9 private String name; 10 @Resource(name = "category") 11 private Category category; 12 13 public int getId() { 14 return id; 15 } 16 17 public void setId(int id) { 18 this.id = id; 19 } 20 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public Category getCategory() { 30 return category; 31 } 32 33 public void setCategory(Category category) { 34 this.category = category; 35 } 36 }
第六步:對Bean的注解
上述例子是對注入對象行為的注解,那么bean對象本身,比如Category,Product可不可以移出applicationContext.xml配置文件,也通過注解進行呢?
接下來就講解如何對Bean進行注解配置
第七步:修改applicationContext.xml
修改applicationContext.xml,什么都去掉,只新增: <context:component-scan base-package="com.spring.cate"/>
其作用是告訴Spring,bean都放在com.spring.cate這個包下
第八步:@Component
為Product類加上@Component注解,即表明此類是bean
為Category 類加上@Component注解,即表明此類是bean
另外,因為配置從applicationContext.xml中移出來了,所以屬性初始化放在屬性聲明上進行了。
Product.java
1 package com.spring.cate; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Component; 5 6 @Component("product") 7 public class Product { 8 private int id; 9 private String name = "product1"; 10 @Autowired 11 private Category category; 12 13 public int getId() { 14 return id; 15 } 16 17 public void setId(int id) { 18 this.id = id; 19 } 20 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public Category getCategory() { 30 return category; 31 } 32 33 public void setCategory(Category category) { 34 this.category = category; 35 } 36 }
Category.java
1 package com.spring.cate; 2 3 import org.springframework.stereotype.Component; 4 5 @Component("category") 6 public class Category { 7 private int id; 8 private String name = "category1"; 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 }
結果: