-
@Component:标注一个普通的Spring Bean类
-
@Controller:标注一个控制器组件类
-
@Service:标注一个业务逻辑组件类
-
@Repository:标注一个DAO组件类
指定了某些类可作为Spring Bean类之后,最后还需要让Spring搜索指定路径,此时需要在Spring配置文件中导入context Schema,并指定一个简单的搜索路径。
<!-- 自动扫描指定包及其子包下的所有Bean类 --> <context:component-scan base-package="com.chromer.service" />
Spring 也允许在使用@Component标注时指定Bean实例的名称:
@Component("axe") public class SteelAxe implements Axe { ... }
-
@Autowired:将Spring容器中的Bean注入进来。默认采用
byType
匹配。 -
@Resource:和
@Autowired
注解相似。默认采用byName
匹配。 -
@Autowired和@Resource的区别:当一个接口有多个实现类时,如果使用
@Autowired
,则需要使用@Qualifier("")
注解来指定某个实现类,如果使用@Resource
,这个书杰本身带一个name
属性可以填那个类的类名。private JdbcTemplete jdbcTemplete; @Autowired public void setJdbcTemplete(JdbcTemplete jdbcTemplete) { this.jdbcTemplete = jdbcTemplete; } @Resource(name = "b") public void setB() { }
-
@Configuration:用于定义配置类,可替换XML配置文件。被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
// 将一个POJO标注为定义Bean的配置类 @Configuration public class Configuration { // 定义两个Bean,并提供了Bean的实例化逻辑 @Bean public UserDao userDao() {return new UserDao();} @Bean public LogDao logDao() {return new LogDao();} // 定义了logonService的Bean @Bean public LogonService logonService() { LogonService logonService = new LogonService(); // 将上面定义的两个Bean注入logonService Bean中 logonService.setLogDao(logDao); logonService.setUserDao(userDao); return lognService; } }
相当于:
<bean id="userDao" class="com.smart.UserDao" /> <bean id="LogDao" class="com.smart.LogDao" /> <bean id="logonService" class="com.smart.LogonService" p:logDao-ref="userDao" p:userDao-ref="logDao" />
-
@Scope:控制Bean的作用范围。如果在
@Bean
处标注了@Scope("prototype")
,则每次返回一个新的Bean。 -
@Import:将多个配置类组装到一个配置类中。,这样只需要注册这个组装好的配置类就可以启动容器。
-
@ImportResource:在
@Configuration
配置类中通过@ImportResource
引入XML配置文件。
Bean不用配置方式的适用场景
基于XML注解配置 | 基于注解配置 | 基于Java类配置 | |
---|---|---|---|
适用场景 | (1)Bean实现类来源于第三方库,如DataSource。Jdbcemplete等,因无法再类中标注注解,所以通过XML配置方式较好。(2)命名空间的配置,如aop,context等,只能采用基于XML的配置。 | Bean的实现类是当前项目开发的,可以直接 在Java类中使用基于注解的配置。 | 基于Java类配置的优势在于可以通过代码方式控制Bean初始化的整体逻辑。如果实例化Bean的逻辑比较复杂,则比较适合基于Java类配置的方式。 |
- @ComponentScan:ComponentScan做的事情就是告诉Spring从哪里找到bean
- @Transactional:
- @RequestMapping:
- @RestController:
@RestController
注解相当于@ResponseBody
+@Controller
合在一起的作用。但是使用@RestController
注解不能返回jsp
或html
页面,只能返回json
或xml
。 - @EnableAutoConfiguration:是由Boot提供的,用于对Spring框架进行自动配置,减少了开发人员的工作量。
- @SpringBootApplication:代替上面
@Configuration
,@ComponentScan
,@EnableAutoConfiguration
三个注解。@SpringBootApplication public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class,args); } }
- @EnableTransactionManagement:在主类
Application
上标注@EnableTransactonManagement
注解(开启事务支持,相当于XML中的<tx:annotation-driven />
配置方式)@SpringBootApplication @EnableTransactionManagement public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }