自己没有学过spring,算是直接接触springboot了,所以这次把spring和springboot的相关注解记录一下,我也是刚开始学习有些理解不到位的东西还请大家多多指教。
1.spring的常见注解
spring通过把java类注册成Bean的方式来管理java类。spring其中有一个很重要的概念就是Ioc控制反转,作用就是你以前创建类是自己通过new的方式来创建,而你把java类注册成bean之后,是借助了spring这个容器,spring然后通过new的方式来创建该类。这样做的好处是减少了耦合度。你创建java类的最终目的是使用该类,用了spring之后多了一个注册的步骤,注册完之后然后才能使用他,如何通过spring使用该类,这就是注入。
-
注册注解
-
@Component 放在类的前面将该类注册成普通的bean,spring管理组件的通用构造形
-
@Controller 为控制器组件类,可通过@Controller(value="")或者@Controller("")来指定bean的名字
-
@Service 为业务逻辑按组件。此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用@Service 而不是 @Component,因为它以更好的方式指定了意图。
-
@Repository 为DAO的组件类,这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。
-
注入注解
1.@Autowired 被用来实现自动装配,可以用来标注成员变量、方法和构造函数等对象,使用@Autowired可以使spring自动搜索符合要求的bean,将其作为参数进行注入。因为@Autowired是根据类型进行注入的,所以当spring存在着多个同类型的bean时此时会发生报错。
public interface EmployeeService {
public Employee getEmployee(Long id);
}
@Service("service1")
public class EmployeeServiceImpl implements EmployeeService {
@Override
public Employee getEmployee(Long id) {
return new Employee();
}
}
@Service("service2)
public class EmployeeServiceImplll implements EmployeeService{
@Override
public Employee getEmployee(Long id) {
return new Employee();
}
}
@Controller
public class EmployeeContrallor {
@Autowired //会报错,存在着多个类型的bean
Employee employee;
}
@Qualifier("service1")和@Autowired的混合使用可以指明自动装配EmployeeServiceImpl
2.@Resource与@Autowired的作用类似。只不过@Resource默认是按照名称进行匹配的,而@Autowired是按照类型进行匹配的。@Resource有两个属性name和type。如果使用name属性是,则按照名字的方式进行注入。如果使用type类型时则按照类型的方式进行注入。如果即不指明name,也不指明type则按照名字的方式进行注入。
个人感觉就是如果sping中不存在相同类型的bean时,可以采用@Autowired注解,因为@Autowired不需要指定名称自动装配。如果spring中存在着多个相同类型的bean时,此时可以采用@Resource。
2.spring boot相关注解
1.@SpringBootApplication=@Configuration+@EnableAutoConfiguration()+@ComponentScan()。其中@Configuration标注在类上,等同于spring的XML配置文件的bean,@EnableAutoConfiguration()实现自动装配,@ComponentScan()扫描组件,自动发现和装配bean。
2.@RestController=@Controller+@ResponseBody。表示被标注的对象时REST风格的bean,并将方法的返回值填入到HTTP报文中返回给用户。
3.@Bean等价于XML文件中的bean,@Value注入spring boot配置文件application.properties配置的属性值。