@Bean

其可以用在方法上,其默认将方法名称作为bean的名称,将方法返回的对象作为bean对象,将其注册到spring容器中。(其也可以bean xml来配置)


@Component

其可以作用在对象上,这样spring主程序在扫描时会扫描路径下所有的组件,组件和里面的内容都会被注册到spring容器中。这是一种通用注解。

@Service

Service是具被Component语义的。其标注了该层是处于业务逻辑层,主要处理复杂的业务逻辑。

@Controller

Controller具备Component语义。其标注了该层是进行前端请求的处理,转发,重定向。包括调用 Service 层的方法。

@Repository

Repository具备Component语义。其标注了该层作为 DAO 对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作。

该层通常都逻辑都较简单,如单个entity的crud,所以都会有template,如直接在Service使用JDBCtemplate即可代替对mysql的dao层。除此之外,也可以使用JPA直接将这一层映射到对象属性上。

💡经典的MVC架构为:

  1. Controller负责接受url与解析其中参数,其通常会自动注入Service对象。简单调用Service方法来返回给前端数据或页面。
  2. Service负责处理业务逻辑,其会根据实际需求设计一些复杂逻辑的处理,并包装成一个函数供Controller调用。其通常会自动注入Repository对象来处理和数据库的交互工作。
  3. Repository负责和db交互,主要是CRUD的逻辑。

@Configuartion

原文链接
Configuartion是具备Component语义的,可以在其里面注册Bean,当其作为Component被scan后,即可使用Ioc容器来注入bean。不同的是,Configuartion语义保证了bean的对象会被cglib代理,该代理会拦截所有@Bean的方法确保其只执行一次,即每次调用bean都是同一个(单例)。


@Autowired

Spring自带的依赖注入方法,其可以修饰类变量并在Ioc中通过类型(Class <?>)来自动装填。如果存在多个同一类型的bean,则使用@Qualifier来指定注入bean的名称。

而JDK中有类似的注解@inject@Resource可以使用,其中inject是根据类型来装填的,而Resource是根据名称来装填的。Autowired和inject都是按类型装填,其使用方法基本一致。不同之处为@Autowired有一个required属性,表示该注入是否是必须的,即如果为必须的,则如果找不到对应的bean,就无法注入,无法创建当前bean。

@Entity

JPA持久化层的注解,通常作用于POJO上,代表这是一个需要映射对象。通常后面需要跟@Table(name=""),代表映射到数据库的表名。而对象里的属性使用@Column(name="")来映射到表里的队列。

Spring-boot内置了基于Hibernate的JPA,只需要继承JpaRepository<POJO.class,Key.class>,即可自动使用里面的诸如save(),delete(),find()等CRUD的操作。

@Schedule

原文链接
开启@EnableScheduling后,即可通过@Schedule来完成定时调度任务。


其他注解

  • @slf4j :这是个log4j的注解,应用于类上后会自动引入loger来打印日志。
  • @SpringBootTest:标注Spring Test的类,通常结合@RunWith(SpringRunner.class)来使用。