package com.atChina.Test5;
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:spring框架提供的注释,给引用类型赋值
* 属性: required:默认是true,表示必须给引用类型赋值成功,如果赋值失败,程序报错,并终止执行.
* false,如果引用类型赋值失败,程序不报错,正常执行,引用类型为空(null).
* 位置: 1):在属性定义的上面,无需set方法,推荐使用
* 2):在set方法的上面
* @Autowired支持自动注入的byName,byType, 默认是byType方式
*
* @Autowired使用byName方式:
* 1).@Autowired
* 2).@Qualifier(value="bean的id")
*/
@Autowired(required=false)
@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
+ "]";
}
}
package com.atChina.Test5;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("sch1")
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.Test5" />
</beans>
@Test
public void test1(){
String configLocation = "com/atChina/Test5/applicationContext.xml"; // 类路径的根目录
ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);
Student ss = (Student)ctx.getBean("student");
System.out.println("stduent:"+ss);
}
测试结果: school属性为null,但程序不报错