spring常用管理bean注解
spring提供了多个注解声明Bean为spring管理的Bean
@Controller 声明此类是一个MVC类,通常与@RequestMapping一起使用
@Controller @RequestMapping("user") public class UserController { @RequestMapping("get/{id}") public String getUser(@PathVariable String id){ return ""; } }
如果访问/user/get/1,将调用getUser方法,并把参数1传给id。
@Service 声明此类是一个业务处理类,通常与@Transactional一起使用
@Service @Transactional public class UserServiceImpl implements UserService { public void order(...){ ... } }
@Repository 声明此类是一个dao类,访问数据库
@Repository public class UserDao implements CrudDao<User,String> { ... } }
@RestController 等于@Controller+@ResponseBody,用于REST服务,可返回json格式字符串
@Component 声明此类是一个Spring管理的类,通常用于无法用上述注解描述的spring管理类
@Configuration 声明此类是一个配置类,通常与@Bean 配合使用
@Configuration public class DataSourceConfig { @Bean(name="dataSource") public DataSource dataSource(Environment env){ HikariDataSource ds=new HikariDataSource(); ds.setDriverClassName(env.getProperty("spring.dataSource.driver-class-name")); ds.setJdbcUrl(env.getProperty("spring.dataSource.url")); ds.setUsername(env.getProperty("spring.dataSource.username")); ds.setPassword(env.getProperty("spring.dataSource.password")); return ds; } }
上例DataSourceConfig 是一个spring容器配置类,配置了HikariDataSource。
@Bean 作用在方法上,声明该方法执行的结果返回结果是一个spring容器管理的Bean,参考上例
spring负责实例化Bean,可以提供一系列回调函数,进一步配置Bean
@PostConstruct 当bean被容器初始化后会调用@PostConstruct注解的方法
@Component public class ExampleBena { @PostConstruct public void init(){...} }
@PreDestory 在容器被销毁之前调用@PreDestory注解的方法
@Service public class ExampleBena { @PreDestory public void clear(){...} }
spring有两种方式来引用容器管理的Bean,一种是根据名字,为每个管理的bean指定一个名字,随后可以通过名字引用此Bean
@Service @Qualifier("exampleBean") public class ExampleBean { }
在其他Bean中使用注解@Qualifier来引用
@Service public class AnotherExampleBean { @Qualifier("exampleBean") ExampleBean bean; }
另一种是根据类型,使用注解@Autowired
@Service public class ExampleBean { } @Service public class AnotherExampleBean { @Autowired ExampleBean bean; }
在一个spring管理的Bean中,可以通过@Autowired声明对其他Bean的引用,作用于属性或者构造函参数,甚至是方法调用参数上。
上面两个注解是spring提供的,还有一个@Resource注解具体参考 Spring注解@Resource和@Autowired的区别