集合的注入只能通过xml来实现。
package com.atChina.Test4;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("sch")
public class School {
@Value("海洋大学")
private String name;
@Value("深海")
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "School [name=" + name + ", address=" + address + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引用Spring的多个Schema空间的格式定义文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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 ">
<!-- 声明组件扫描器,指定组件所在的包名
component-scan标签:组件扫描器
base-package:指定注解所在的包名,框架会扫描这个包和子包中类的注解
-->
<context:component-scan base-package="com.atChina.Test3" />
</beans>
注解@Autowired,byType方式实现引用类型的赋值
package com.atChina.Test3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
/*
* @Component: 创建对象,默认创建的是单例对象
* 属性: value,表示对象的id
* 位置: 在类的上面,表示创建该类的对象
* @Component(value="myStudent")等同于<bean id="myStudent" class="com.atChina.Test.Student" />
*
*/
@Component("student")
public class Student {
@Value("宋江")
private String name;
private int age;
/*
* 引用类型,使用框架的自动注入:
* @Autowired:spring框架提供的注释,给引用类型赋值
* 位置: 1):在属性定义的上面,无需set方法,推荐使用
* 2):在set方法的上面
* @Autowired支持自动注入的byName,byType, 默认是byType方式
*/
@Autowired
private School school;
public void setName(String name) {
System.out.println("setName:"+name);
this.name = name;
}
@Value("22")
public void setAge(int age) {
System.out.println("setAge:"+age);
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school
+ "]";
}
}
注解@Autowired,byName方式实现引用类型的赋值
package com.atChina.Test4;
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.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
/*
* @Component: 创建对象,默认创建的是单例对象
* 属性: value,表示对象的id
* 位置: 在类的上面,表示创建该类的对象
* @Component(value="myStudent")等同于<bean id="myStudent" class="com.atChina.Test.Student" />
*
*/
@Component("student")
public class Student {
@Value("宋江")
private String name;
private int age;
/*
*
* @Autowired使用byName方式:
* 1).@Autowired
* 2).@Qualifier(value="bean的id")
*/
@Autowired
@Qualifier(value="sch")
private School school;
public void setName(String name) {
System.out.println("setName:"+name);
this.name = name;
}
@Value("22")
public void setAge(int age) {
System.out.println("setAge:"+age);
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school
+ "]";
}
}