详细易懂带你了解Spring中的注解
作者:SunCodingづ
Spring注解
Spring的一个核心是IOC,是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。
Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!
注解本身是没有功能的,和xml一样,注解和xml都是一种元数据,元数据即解释数据的数据,也就是所谓的配置。
声明bean的注解
- @Component: 普通的注解
- @Service :业务逻辑层以及Service层
- @Controller: 外部层
- @Repository :dao层即持久层
注:@Controller、@Service、@Repository都可以称为@Component
注入bean的注解
@Autowired (根据属性类型自动装配)
当在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。
当需要使用这个bean的时候,加上==@Autowired==注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。
- @Autowired可以标注在属性上、方法上和构造器上,来完成自动装配。
- 默认是根据属性类型,spring自动将匹配到的属性值进行注入
当@Autowired标注的属性是接口时,其实注入的是这个接口的实现类, 如果这个接口有多个实现类,只使用@Autowired就会报错,因为它默认是根据类型找,然后就会找到多个实现类bean,所有就不知道要注入哪个。然后它就会根据属性名去找。所以如果有多个实现类可以配合@Qualifier(value=“类名”)来使用
@Autowired private UserServiceImpl userService; @GetMapping("{id}") public Result<List<OrderDTO>> selectById(@PathVariable Integer id) { List<OrderDTO> list = userService.selectById(id); return Result.ok(list); }
@Resource (可以根据类型注入,也可以根据名称注入)
@Resource有两个重要属性,分别是name和type
spring将name属性解析为bean的名字,而type属性则被解析为bean的类型。
所以如果使用name属性,则使用byName的自动注入策略,如果使用type属性则使用byType的自动注入策略。
如果都没有指定,则通过反射机制使用byName自动注入策略。
@Resource(name="gender") private String gender; @Resource(name="age") private String age;
<bean name="gender" class="java.lang.String"> <constructor-arg value="${oos.gender}"/> </bean> <bean name="age" class="java.lang.String"> <constructor-arg value="${oos.age}"/> </bean>
@Resource和@Autowired注解都是实现依赖注入的。
只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。
@Qualifier (根据属性名称进行注入)
@Qualifier的使用要和上面的@Autowired一起使用,让系统知道了我们具体要引入哪个实现类,当有多个实现类的时候,我们可以使用此方法
@Autowired @Qualifier(value = "userDaoImpl") private UserDao userDao;
@Value 注入普通类型的注入
通过@Value注解指定系统属性的名称susan.test.userName,该名称需要使用${}包起来。
@Value注解中指定的系统属性名,必须跟配置文件中的相同。
@Service public class UserService { @Value("${test.userName}") private String userName; public String test() { System.out.println(userName); return userName; } }
而配置文件中配置的系统属性名是:
test.user-name=张三
最后获取数据时,会发现userName竟然可能会出现乱码:
手动将ISO-8859-1格式的属性值,转换成UTF-8格式。
到此这篇关于详细易懂带你了解Spring中的注解的文章就介绍到这了,更多相关Spring中的注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!