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的区别

 

 

 

 

posted @ 2018-06-13 11:28  cralor  阅读(413)  评论(0编辑  收藏  举报