Java菜鸟学习日记36

来源:互联网 发布:施工组织设计软件 编辑:程序博客网 时间:2024/06/14 07:21
监听器
把对象放入对象池(把类注册到对象池)的方法
  1. 使用注解 + <context:component-scan>
    1. @Component:可以标记任何类,没有任何特殊含义
    2. @Controller:标记控制器类,明确地暗示这个类是一个控制器类。Spring对象池本身不在乎对象是什么,对SpeingMVC有作用
    3. @RestController:标记控制器类,每一个请求处理方法自动被标记为@ResonueBody
    4. @Service:标记服务类
    5. Reposilory:标记数据访问类(Dao)
    6. 上面的注解实际都是@Componet,只是名字不同,名字对程序起到暗示作用,而在@Componer本身也是一个记号,用来告诉扫描器,将标记类注册到对象池中。
    7. <component-scan>有子标签,可以决定扫描那些包,排除那些包,从而让注释扫描更精确,速度更快。
    8. 不足之处:使用注解的不足是,获取到的对象仅仅是无参构造方法初始化产生的,其属性并没有我们需要的赋值
  2. 在对象池的配置文件中,详细的描述bean
    1. 通过<bean>标签可以向对象池中添加对象(或对象工厂)
    2. 好处是:可以随意初始化bean对象
      1. 可以调用有参构造方法
      2. 可以通过调用setter给属性赋值
<bean class> = "对象的类"
<constradcr-arg/>
<constradcr-arg/>
</bean>
<bean class="对象的类">
<property name="属性名" value=“属性值”/>
</bean>
如果属性值是其它bean
<bean class=””>
<property name=”属性名ref=“其它bean名字” />
<property name=”属性名”>
<ref local=“本对象池中的其它bean名字” />
<ref parent=”父对象池中的bean名字” />
<ref bean=”其它bean名字” />
</property>
</bean>
 
如果想给属性值(一个对象)的属性赋值
<bean class=””>
<property name=”属性名.属性名” >
</bean>
如果属性值比较复杂
<bean class=””>
<property name=”列表属性”>
<list>
<value>列表项1</value>
<value>列表项2</value>
</list>
</property>
</bean>
<bean class=””>
<property name=”集合属性”>
<set>
<value>列表项1</value>
<value>列表项2</value>
</set>
</property>
</bean>
 
<bean class=””>
<property name=”字典属性”>
<entry key=”名称1” value=”1” />
<entry>
<key><value>名称2</value></key>
<value>2</value>
</entry>
<entry>
<key><value>名称3</value></key>
<value>3</value>
</entry>
</property>
</bean>
// 能够创建对象的方法被称为工厂方法
如果没有公开的构造方法(通过工厂方法创建对象)
<bean class=”对象的类” factory-method=”能创建对象的静态方法” />
<bean class=”对象的类” factory-bean=”工厂bean”
factory-method=”能创建对象的实例方法” />
指定Bean的作用域
@Scope(“作用域名”)
<bean scope=”作用域名”>
指定Bean的名称
不指定名称时,通过类全名生成,如果同一个类有多个bean则后面加#1编号
注解指定 @Component(“beanName”)
配置指定 <bean id=”beanName”>
 <bean name=”beanName1, beanName2,…”>
指定别名 <alias name=”beanName” alias=”beanAlias” />
 
在同一个对象池中名字不能重复
指定名称后有利于通过编程方式以   getBean()  方法获取bean
 
获取Bean
@Autowired    按类类型注入,如果对象池中存在多个本类的对象,则报错
@Qualifier(‘beanName’)   多个对象时,限定取哪一个
@Lazy   懒创建,使用时才创建bean,有利于减少内存及加快启动速度
默认情况下,对象池创建时,会创建所有的bean
可以在<beans>根标签上添加 default-lazy-init=”true” 让本对象池整体懒创建
@Resource    按类型
@Resource(“beanName”)    按名字
编程:对象池.getBean();
 
获取Bean对象池
Bean类实现BeanFactoryAware或ApplicationContextAware
 
参与Bean的生命周期
注解   @PostConstruct, @PreDestroy …
bean构造完成后或销毁前会调用@PostConstruct, @PreDestroy标记的方法
 
接口  InitialzingBean    也可以获得相应的事件,而且还多了一个
afterPropertiesSet()    // 在属性都设置完成后会调用
原创粉丝点击