@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架构为:
- Controller负责接受url与解析其中参数,其通常会自动注入Service对象。简单调用Service方法来返回给前端数据或页面。
- Service负责处理业务逻辑,其会根据实际需求设计一些复杂逻辑的处理,并包装成一个函数供Controller调用。其通常会自动注入Repository对象来处理和数据库的交互工作。
- 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)来使用。