spring容器创建bean对象的方式:

1,使用反射调用无参构造器来创建实例(前提是这个类有无参构造器)(常规方式)

2,通过工厂类获得实例(工厂类实现了接口FactoryBean<?>)

3,通过实例工厂获得bean对象(不需要实现或者继承任何接口或者父类)

4,通过静态工厂获得实例

ioc中的annotation配置

1,@Autowired
    1) @Autowired使用后需要在xml文件加入以下配置才能生效: <context:annotation-config/>

 2)@Autowired默认使用byType来装配属性,如果匹配到类型的多个实例,再通过byName来确定Bean。

2,@Resource

  1)@Resource的作用和@Autowired差不多,只不过 @Resource是默认先用byName,如果找不到合适的就再用byType来注入

  2)在xml文件加入以下配置才能生效: <context:annotation-config/>

byName就是通过Bean标签中的id或者name属性值进行匹配注入(匹配的是setXxx中去掉set后的名字),byType就是按Bean标签中的Class的类型进行匹配注入。(根据当前类中的set方法里面参数的类型,
            去容器中找相匹配的对象)

eg:

注意:自动装配只对[对象类型]起作用,对基本类型不起作用.

@Autowired
private Car car;
  <!-- autowire注解 默认bytype,再byname -->
<bean name="car" class="com.briup.ioc.annotation.Car">
<property name="price" value="33333"></property>
<property name="name" value="test"></property>
</bean>
<bean name="car123456" class="com.briup.ioc.annotation.Car">
<property name="price" value="122222"></property>
<property name="name" value="baoma"></property>
</bean>
结果为:
33333.0
test

3,@controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层

4、@service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理

5、@repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.

6、@component (把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@Component是Spring中所有bean组件的通用形式, @Repository @Service @Controller 则是 @Component的细化(它们区别很小,但最好归类使用)

@Component有一个可选的参数,用于指定bean的名称
        @Component("boss")

若不指定,默认为当前类的类名小写

@Component注解可以直接定义bean,而无需在xml定义。但是若两种定义同时存在,xml中的定义会覆盖类中注解的Bean定义

@Component注解直接写在类上面即可

注意:
    1.component-scan标签默认情况下自动扫描指定路径下的包(含所有子包)

2.component-scan标签将带有@Component @Repository @Service @Controller注解的类自动注册到spring容器中

3.component-scan标签对标记了@Required @Autowired @PostConstruct @PreDestroy
@Resource @WebServiceRef @EJB   @PersistenceContext
@PersistenceUnit等注解的类进行对应的操作,使注解生效
    
    4.component-scan标签包含了annotation-config标签的作用

最新文章

  1. Guacamole之配置Guacamole(五)
  2. 关于javascript的误区
  3. HDU 3294 (Manacher) Girls&#39; research
  4. REM 注释
  5. Golang全接触
  6. Java从服务器上获取时间,动态在jsp页面显示
  7. 禁用物料不允许BOM
  8. OpenJudge Trans
  9. Linux 下的php,nginx,mysql的安装
  10. Windows系统命令行net user命令用法
  11. CodeSmith生成实体类
  12. shiro基础学习(二)&mdash;shiro认证
  13. Python 学习——高阶函数 filter 和 sorted
  14. 关于 form表单 嵌套问题的解决方案
  15. xamarin.forms之使用CarouselView插件模仿网易新闻导航
  16. .pyc是个什么 python的执行过程
  17. centos7下mysql半同步复制原理安装测试详解
  18. Vue解决同一页面跳转页面不更新
  19. UVA.12230.Crossing Rivers(期望)
  20. Haskell语言学习笔记(71)Semigroup

热门文章

  1. 九度oj 题目1056:最大公约数
  2. HDU 5642 King&#39;s Order【数位dp】
  3. codevs——1742 爬楼梯
  4. (入门SpringBoot)SpringBoot来临(一)
  5. NOIP 2010 机器翻译
  6. CTO是有门槛的 我眼中真正优秀CTO应具备五大素质
  7. jmeter的master-slave模式
  8. 大话设计模式C++实现-第8章-工厂方法模式
  9. 二叉查找树(BST)
  10. SpringMVC学习指南-Spring框架