@Autowired 自动加载
@Autowired 注解,可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作。@Autowired 注解可以放在类,接口以及方法上。在使用@Autowired之前,我们对一个bean配置属性时,是用
<property name="属性名" value=" 属性值"/> 。@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier 注解使用。
案例
引用 spring-data-mongodb-2.0.11.RELEASE.jar 包中 MongoRepository 接口
@NoRepositoryBean
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
<S extends T> List<S> saveAll(Iterable<S> var1);
List<T> findAll();
List<T> findAll(Sort var1);
<S extends T> S insert(S var1);
<S extends T> List<S> insert(Iterable<S> var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
定义 CmsPageRepository 接口 继承MongoRepository 接口
public interface CmsPageRepository extends MongoRepository<CmsPage,String> {
// 根据页面名称查询
CmsPage findByPageName(String pageName);
//根据页面名称、站点Id、页面webpath查询
CmsPage findByPageNameAndSiteIdAndPageWebPath(String pageName,String siteId,String pageWebPath);
}
在 spring-data-mongodb 包中的类 SimpleMongoRepository 实现接口 MongoRepository
public class SimpleMongoRepository<T, ID> implements MongoRepository<T, ID> {
private final MongoOperations mongoOperations;
private final MongoEntityInformation<T, ID> entityInformation;
public SimpleMongoRepository(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
Assert.notNull(metadata, "MongoEntityInformation must not be null!");
Assert.notNull(mongoOperations, "MongoOperations must not be null!");
this.entityInformation = metadata;
this.mongoOperations = mongoOperations;
}
CmsPageRepository 通过 @Autowired 注解 获取 SimpleMongoRepository 中方法
定义 PageService 类使用 CmsPageRepository 接口, 验证 @Autowired 注释加载 SimpleMongoRepository 类,获取其中方法。
@Service
public class PageService {
@Autowired
CmsPageRepository cmsPageRepository;
}
注意
启动spring IoC 容器,为对象赋值的时候,当容器扫描到@Autowiedt 注解,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,来创建属性的实例,然后再利用反射机制,将实例化好的属性,赋值给对象上,并装配给该对象的属性。
@Autowired 是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用。