/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

Spring之注解注入bean


注:本文来源于: EliniceSpring之注解注入bean

1.引入jar包。配置log4j.properties文件

image


2.创建Person类

  1 package com.hy.spring.pojo;
  2 
  3 import org.springframework.stereotype.Component;
  4 
  5 //使用component的注解方式注入
  6 //@Component("person"),等同于使用依赖注入方式,配置的<bean name="person"  class="com.hy.spring.pojo.Person"></bean>
  7 @Component("person")
  8 public class Person {
  9 
 10 	@Override
 11 	public String toString() {
 12 		return "Person [name=" + name + ", age=" + age + ", mycar=" + mycar + "]";
 13 	}
 14 
 15 	private String name;
 16 	private Integer age;
 17 	private Car mycar;
 18 
 19 	public  Person() {
 20 		super();
 21 		System.out.println("构造方法被调用");
 22 	}
 23 
 24 	public String getName() {
 25 		return name;
 26 	}
 27 
 28 	public void setName(String name) {
 29 		this.name = name;
 30 	}
 31 
 32 	public Integer getAge() {
 33 		return age;
 34 	}
 35 
 36 	public void setAge(Integer age) {
 37 		this.age = age;
 38 	}
 39 
 40 	public Car getMycar() {
 41 		return mycar;
 42 	}
 43 
 44 	public void setMycar(Car mycar) {
 45 		this.mycar = mycar;
 46 	}
 47 }
 48 
 49 
View Code

创建Car类

  1 package com.hy.spring.pojo;
  2 
  3 
  4 public class Car {
  5 
  6 	private String name;
  7 	private String color;
  8 
  9 	@Override
 10 	public String toString() {
 11 		return "Car [name=" + name + ", color=" + color + "]";
 12 	}
 13 	public String getName() {
 14 		return name;
 15 	}
 16 	public void setName(String name) {
 17 		this.name = name;
 18 	}
 19 	public String getColor() {
 20 		return color;
 21 	}
 22 	public void setColor(String color) {
 23 		this.color = color;
 24 	}
 25 }
 26 
 27 
View Code


3.配置applicationContext.xml

  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:p="http://www.springframework.org/schema/p"
  5     xmlns:context="http://www.springframework.org/schema/context"
  6     xsi:schemaLocation="http://www.springframework.org/schema/beans
  7         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  8         http://www.springframework.org/schema/context
  9         http://www.springframework.org/schema/context/spring-context.xsd">
 10 
 11         <context:component-scan base-package="com.hy.spring.pojo"></context:component-scan>
 12 
 13 </beans>
 14 
View Code

4.编写测试用例

  1 package com.hy.spring.pojo;
  2 
  3 import javax.annotation.Resource;
  4 
  5 import org.junit.Test;
  6 import org.junit.runner.RunWith;
  7 import org.springframework.test.context.ContextConfiguration;
  8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  9 
 10 //创建容器
 11 @RunWith(SpringJUnit4ClassRunner.class)
 12 @ContextConfiguration("classpath:applicationContext2.xml")
 13 public class RunWithTest {
 14 
 15 
 16 	//在bean容器中查找name为person的对象,就是我们之前在Person类中用注解component创建的bean
 17 	@Resource(name="person")
 18 	private Person p;
 19 
 20 	@Test
 21 	public void test() {
 22 		System.out.println(p);
 23 	}
 24 }
 25 
 26 
View Code


总结

1.其他类级别的注解

  1 @Component("person")   //适用于所有层
  2 @Service("person")     //适用于Service层
  3 @Repository("person")  //适用于持久层
  4 @Controller("person")  //适用于Controller层
  5 
View Code


2.限制单例或是多例

  1 @Component("person")   //适用于所有层
  2 @Scope(scopeName="singleton")//限制创建单例对象
  3 //@Scope(scopeName="prototype")//限制创建多例对象
  4 
View Code


3.set方式注入value值

  • 在私有的成员变量注入
  1     @Value("BMW")
  2 	private String name;
  3 	@Value("Red")
  4 	private String color;
  5 
View Code
  • 在set方法中注入
  1     @Value("BMW")
  2     public void setName(String name) {
  3 		this.name = name;
  4 	}
  5 	@Value("Red")
  6 	public void setColor(String color) {
  7 		this.color = color;
  8 	}
  9 
View Code


4.自动装配注解,@Autowired

注意,此处按照对象的类型进行自动装配

  1     @Autowired
  2 	private Car mycar;
  3 
View Code

自动装配的例子
1.Person类

  1 package com.hy.spring.pojo;
  2 
  3 import org.springframework.beans.factory.annotation.Autowired;
  4 import org.springframework.beans.factory.annotation.Value;
  5 import org.springframework.stereotype.Component;
  6 
  7 @Component("person")
  8 public class Person {
  9 
 10 	@Override
 11 	public String toString() {
 12 		return "Person [name=" + name + ", age=" + age + ", mycar=" + mycar + "]";
 13 	}
 14 
 15 	private String name;
 16 	private Integer age;
 17 
 18 	@Autowired
 19 	private Car mycar;
 20 
 21 	public  Person() {
 22 		super();
 23 		System.out.println("构造方法被调用");
 24 	}
 25 
 26 	public String getName() {
 27 		return name;
 28 	}
 29 
 30 	@Value("Tom")
 31 	public void setName(String name) {
 32 		this.name = name;
 33 	}
 34 
 35 
 36 	public Integer getAge() {
 37 		return age;
 38 	}
 39 
 40 	@Value("18")
 41 	public void setAge(Integer age) {
 42 		this.age = age;
 43 	}
 44 
 45 	public Car getMycar() {
 46 		return mycar;
 47 	}
 48 
 49 
 50 	public void setMycar(Car mycar) {
 51 		this.mycar = mycar;
 52 	}
 53 
 54 }
 55 
View Code

2.Car类

  1 package com.hy.spring.pojo;
  2 
  3 import org.springframework.beans.factory.annotation.Value;
  4 import org.springframework.stereotype.Component;
  5 
  6 @Component("car")
  7 public class Car {
  8 
  9 	@Value("BMW")
 10 	private String name;
 11 	@Value("Red")
 12 	private String color;
 13 
 14 	@Override
 15 	public String toString() {
 16 		return "Car [name=" + name + ", color=" + color + "]";
 17 	}
 18 	public String getName() {
 19 		return name;
 20 	}
 21 	public void setName(String name) {
 22 		this.name = name;
 23 	}
 24 	public String getColor() {
 25 		return color;
 26 	}
 27 	public void setColor(String color) {
 28 		this.color = color;
 29 	}
 30 }
 31 
View Code

3.applicationContext.xml

  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:p="http://www.springframework.org/schema/p"
  5     xmlns:context="http://www.springframework.org/schema/context"
  6     xsi:schemaLocation="http://www.springframework.org/schema/beans
  7         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  8         http://www.springframework.org/schema/context
  9         http://www.springframework.org/schema/context/spring-context.xsd">
 10 
 11         <context:component-scan base-package="com.hy.spring.pojo"></context:component-scan>
 12 
 13 </beans>
 14 
View Code


4.测试类

  1 package com.hy.spring.pojo;
  2 
  3 
  4 import javax.annotation.Resource;
  5 
  6 import org.junit.Test;
  7 import org.junit.runner.RunWith;
  8 import org.springframework.test.context.ContextConfiguration;
  9 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 10 
 11 
 12 @RunWith(SpringJUnit4ClassRunner.class)
 13 @ContextConfiguration("classpath:applicationContext2.xml")
 14 public class RunWithTest {
 15 
 16 	@Resource(name="person")
 17 	private Person p;
 18 
 19 	@Test
 20 	public void test() {
 21 		System.out.println(p);
 22 	}
 23 }
 24 
View Code

5.运行结果,控制台输出信息:


自动装配可能存在的问题,一个类型有多个对象,自动装配不知道装配哪个对象
如:假设applicationContext.xml配置为

  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:p="http://www.springframework.org/schema/p"
  5     xmlns:context="http://www.springframework.org/schema/context"
  6     xsi:schemaLocation="http://www.springframework.org/schema/beans
  7         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  8         http://www.springframework.org/schema/context
  9         http://www.springframework.org/schema/context/spring-context.xsd">
 10 
 11     <bean name="car1"  class="com.hy.spring.pojo.Car">
 12         <property name="name" value="BMW1"></property>
 13        <property name="color" value="red"></property>
 14     </bean>
 15 
 16    <bean name="car2"  class="com.hy.spring.pojo.Car">
 17         <property name="name" value="BMW2"></property>
 18        <property name="color" value="blue"></property>
 19     </bean>
 20 
 21 </beans>
 22 
View Code

1.可以用@Qualifier(“name”)解决,如下:

  1     @Autowired
  2     @Qualifier("car1")
  3 	private Car mycar;
  4 
View Code

2.可以用@Resource(name=“name”)解决,如下:

  1     @Resource(name="car1")
  2 	private Car mycar;
  3 
View Code
posted @ 2021-04-22 11:57  一品堂.技术学习笔记  阅读(160)  评论(0编辑  收藏  举报