使用注解给属性赋值:
给User类创建一个name属性并使用@Value()注解赋值:
测试方法:
结果:
成功赋值!
使用注解赋值除了可以直接赋值以外,还可以使用${}、#{}
其中#{}中写SpEL表达式:
创建资源文件:
然后在xml中配置(引用外部资源文件):
然后是User类中填写:
新建一个Bean;
在User类中获取name:
结果:
属性值的自动注入:
在service层创建方法:
在控制层创建方法:
并在属性上添加注解@Autowired进行自动注入:
dao中的方法:
结果:
使用@Autowired来实现自动注入 bytype byname * 默认优先根据类型去匹配 * 如果匹配到多个类型则会按照名字匹配 * 如果名又没有匹配到则会报错 1.可以去修改属性的名字对应bean的名字:userServiceImpl 2.可以去修改Bean的名字对应属性的名字:@Service("userService") 3.可以通过@Qualifier设置属性的类名字 4.可以通过@Primary设置其中一个Bean为主要的自动注入Bean: @Primary 5.使用泛型作为自动注入的限定符
当有两个Bean都实现了同一个接口,此时按照类型查找Bean就会报错,那么就有三种方法解决:
第一种:
第二种:
第三种:
首先UserServiceImpl的方法中输出:
RoleServiceImpl中输出:
使用类名字:
虽然属性是roleServiceImpl,但是输出结果:
使用的是UserServiceImpl中的方法;
第四种:
测试:
输出结果:
发现不会报错,使用的是设置的主要Bean;
第五种:
将服务类的公共接口设置为泛型:
并在实现类中指定泛型的类型:
然后在控制层获取的时候:
测试方法:
输出结果:
这里使用泛型,那么就相当于需要在使用泛型方法之前将泛型指定为一个类,那么就相当于在自动注入的时候已经指定了类,自然就能成功注入。