spring @component 详解

来源:互联网 发布:移动的网络电视怎么样 编辑:程序博客网 时间:2024/05/22 03:39
1、@controller 控制器(注入服务)2、@service 服务(注入dao)3、@repository dao(实现dao访问)4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。 
下面写这个是引入component的扫描组件 
<context:component-scan base-package=”com.mmnc”>   
其中base-package为需要扫描的包(含所有子包) 
       1、@Service用于标注业务层组件 
       2、@Controller用于标注控制层组件(如struts中的action) 
       3、@Repository用于标注数据访问组件,即DAO组件. 
       4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。    
           @Service public class UserServiceImpl implements UserService { } 
           @Repository public class UserDaoImpl implements UserDao { } getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“***”)               这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”)            @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意): @PostConstruct public void init() { }二把属性注入到类1.该实例可以自动装配具有@Autowired@Resource @Inject注解的属性.以
@Autowired 为例子1
Autowired注解自动装配具有兼容类型的单个 Bean属性
构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired注解
默认情况下, 所有使用 @Authwired注解的属性都需要被设置. Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Authwired注解的 required 属性为 false
默认情况下, IOC 容器里存在多个类型兼容的 Bean , 通过类型的自动装配将无法工作. 此时可以在 @Qualifier 注解里提供 Bean 的名称. Spring 允许对方法的入参标注 @Qualifiter已指定注入 Bean 的名称@Servicepublic class UserService {    @Autowired    @Qualifier("userRespositoryImp")    private UserRespository userRespository;        public void save(){        System.out.println("UserService  save()...");        userRespository.save();    }
UserRespository是一个接口,当两个以的类现在这个接口时,只用@Autowired    private UserRespository userRespository; 注入属性会报错的。要使用@Qualifier()具体的标识那一个现实类的属性 使用方法@Autowired    @Qualifier("userRespositoryImp")    private UserRespository userRespository;    
@Authwired注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.
@Authwired注解也可以应用在集合属性, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.
@Authwired注解用java.util.Map上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值






0 0