@Component 组件
@Controller 控制器
@Service 业务
@Repository 仓库
这四个标签是为了创建对象
其实他们四个本质都一样,只不过另外三个是Component的别名,在不同层使用容易区分
首先需要加入aop依赖,如果你事先加入spring-context依赖,则会关联加入aop依赖
第二步,配置xml文件,修改命名空间
修改beans变成context
第三步,指定要扫描哪些包中的类
第四步,加入注解
getBean中传入注解的value值,如果在这四个当中不填value值,默认类名首字母变小写
如果要扫描多个包,可以在配置文件用,隔开
也可以指定一个父包
选择性实例化Bean,现在由于某种特殊业务的需要,只允许其中所有的Controller参与Bean管理
第一种解决方案:use-default-filters="false" 使全部带有声明Bean的失效
第二种解决方案:排除掉,exclude-filter
负责注入的标签:
@Value
@Autowired
@Qualifier
@Resource
@Value用来注入简单类型,并且可以不提供set方法,可以放在属性上,也可以放在set方法上以及构造方法上
@Autowired注入非简单类型,默认byType,根据类型自动装配,不需要指定任何属性,但不能有多个实现类,不需要set方法
也可以出现在set方法上,构造方法上,构造方法参数上
可以省略@Autowired,要求只有一个构造方法并且能和属性能对应上
@Autowired和@Qualifier联合使用,可以根据名字进行装配
要注入哪个就在@Qualifier中填写哪个bean
@Resource注解也可以完成非简单类型注入,他是JDK扩展包中的,属于JDK的一部分,所以该注解是标准注解,更加具有通用性,而是@Autowired是spring框架自己的
@Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name,找不到的话通过byType装配,并且只适用于属性上,setter方法上
需要引入依赖
全注解编程:
定义一个类,加入@Configuration注解,表示这里类代替配置文件,@ComponentScan指定扫描的包
此时需要new的对象不同,为AnnotationConfigApplicationContext,并且把配置类放到参数中