spring 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!--指定spring IOC 容器扫描的包
base-package: 指定扫描的基础包的类
resource-pattern: 指定基础包下扫描的资源支持通配符
-->
<!--<context:component-scan-->
<!--base-package="com.datou.annotation"-->
<!--resource-pattern="test/*.class">-->
<!--</context:component-scan>-->
<!--<context:exclude-filter 子节点指定排除那些指定表达式的组件 可以有多个此子节点
context:include-filter 子节点 指定包含那些表达式的组件 可以有多个此子节点 该子节点学要 和use-default-filters配合使用
type参数: annotation 注解表达式,assignable 类
use-default-filters: 默认为true 会扫描所以的注解-->
<context:component-scan base-package="com.datou.annotation" use-default-filters="true">
<!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component"></context:exclude-filter>-->
<!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"></context:include-filter>-->
<!--<context:include-filter type="assignable" expression="com.datou.annotation.test.Student"></context:include-filter>-->
</context:component-scan>
</beans>
类文件
package com.datou.annotation.test;
import com.datou.annotation.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/*
* @Autowired 自动装配 ,可以写在单个属性,setter方法,等都可以
* 先根据单个bean类型来查找对应的bean进行装配,如果找到的bean为空也就是没有交给IOC容器实例化会报错,此时可以设置 @Autowired(required = false)来返回null而不包错
* 如果找到的bean有多个他会根据名字来进行匹配,也可以指定对应bean名字通过 @Qualifier("user")来指定,他也可以写在setter方法参数里面
* 如果直接指定名字化,他会直接根据名字匹配
* 和@Resource 需要些一个bean的名称 没有的化直接根据变量名或或方法名查找对应的bean
* */
@Component("su")
public class Student {
@Autowired(required = false) //根据bean单个类型来自动装配
@Qualifier("user")
private User u;
public User getU() {
return u;
}
public void setU( @Qualifier("user") User u) {
this.u = u;
}
public void say() {
System.out.println("sfsfsfsfsf");
u.say();
System.out.println(u);
}
}
package com.datou.annotation;
import org.springframework.stereotype.Component;
@Component
public class User {
public void say() {
System.out.println("say hi");
}
}
package com.datou.test;
import com.datou.annotation.User;
import com.datou.annotation.test.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main2 {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-annotation.xml");
// User u = (User) ctx.getBean("s");
//注解方式扫描如果没有指定名称默认是类名首字母小写的类的名字
Student us = (Student) ctx.getBean("su");
us.say();
}
}