原始的存储bean对象
更简单的存储bean对象
1.配置扫描路径:配置一下存储对象的扫描包路径,只有被配置的包下的所有类,添加了注解下能被正确的识别并保存到spring中
如下,若此时APPUser、User这两个类加了注解,就行保存到spring中
2.方法:
①类注解:将类注解添加在某个类上
五大类注解:@Controller、@Service、@Repository、@Component、@Configuration
以Controller为例子,其他的类注解也是一样的
在启动类中,将如何进行获取bean对象呢?
Bean的命名规则:如果类名的首字母是大写,第二个字母是小写,那么getBean里面的名称就是类名的第一个字母小写,其余字母大小写不变;若类名的首字母是大写,第二个字母也是大写,那个getBean里面的名称就是原类名。
User类
APPUser类
原因:查询Spring关于bean存储时的命名规则
查询:得到当前这个类,可以解释bean存储时的命名规则
这个方法里面就解释了bean的命名规则,并且这个方法使用的是JDK中的
②方法注解:将注解(@Bean)添加在某个方法上
@Bean注解必须搭配类注解才能将对象正常的存储到Spring中
在启动类中获取bean对象
此时getBean里面的名称默认等于方法名
重命名Bean:通过设置name属性给Bean对象进行重命名操作
重命名的name是一个数组,一个bean可以有多个名字
当一个类中多个Bean使用相同的名字,程序并不会报错,但是第一个Bean之后的对象不会在被存储到容器中(即按照代码的先后顺序执行)
输出结果为:
调换两个bean的代码顺序:
输出结果为:
获取Bean对象
获取bean对象也叫对象装配,是把对象取出来放到某个类中,有时候也叫对象注入
①属性注入:使用@Autowired
优点:使用简单
缺点:1.无法注入finnal修饰的变量;2.通用性问题,只适用于Ioc容器;3.更容易违背单一设计原则
例子:将Service类注入到Controller中
②Setter注入(UserController代码一样、启动类代码类似)
注意:Setter注入即和属性的Setter方法一样。在使用时必须在前面加上@Autowired
优点:符合单一设计原则
缺点:1.无法注入一个finnal修饰的变量;2.setter注入的对象可以被修改
③ 使用构造方法注入(UserController代码一样、启动类代码类似)
注意:如果只有一个构造方法时,@Autowired可以省略
优点:1.可以注入一个finnal修饰的变量;2.注入的对象是不可变的,因为构造方法只加载一次;3.构造方法注入可以保证对象完全初始化;4.通用性更好
缺点:写法比属性注入麻烦
②使用@Resource注入
@Autowired和@Resource的区别
①@Autowired来自spring,而@Resource来自于JDK
②与@Autowired来说,@Resource支持更多的参数设置
③@Autowired可以用于属性注入、setter注入和构造方法注入,而@Resource只用于属性注入和setter注入,不能用于构造方法注入