spring入门学习一

一、资源的获取,即bean的配置文件

  1.读取配置文件,beans.xml:注意beans.xml的写法:如果放到根目录下,那么直接写beans.xml,如果放到子目录下,子目录名/beans.xml。

  2.实例化bean工厂对象,载入xml资源:工厂负责管理bean组件的目前是管理当前xml资源中的bean。

  3.常用ClassPathXmlApplicationContext 直接代替上面两步。

  3.通过bean工厂对象得到你要找的bean实例。

//ClassPathResource resource=new ClassPathResource("beans.xml");

//XmlBeanFactory factory=new XmlBeanFactory(resource);

ClassPathXmlApplicationContext factory=new

ClassPathXmlApplicationContext("beans.xml");

Hello hello=(Hello)factory.getBean("hello");

 二、注入的类型,构造器注入和set注入

 1、构造器注入<constructor-arg>和set注入<property name="model">。

     <bean id="view" class="test.ViewImp">
         <constructor-arg>
              <ref bean="model"></ref>
         </constructor-arg>
         <property name="model">
              <ref bean="model"></ref>
         </property>
     </bean>
   2、map类型的注入。scope 默认是"singleton" 单例,"prototype"非单例。
 
    <bean id="ioc" class="test.mapAImp" scope="prototype">
         <property name="map">
              <map>
                   <entry key="1">
                       <value>a</value>
                   </entry>
                   <entry key="2">
                       <value>b</value>
                   </entry>
                   <entry key="3">
                       <value>c</value>
                   </entry>
              </map>
         </property>
     </bean>
 3、工厂方法,静态工厂

   <bean id="name" class="factory.GetNameFactory" factory-method="createName" >
     <constructor-arg>
      <value>test</value>
     </constructor-arg>
   </bean>
 4、bean的装配和管理

    继承属性:<bean Parent>
    若干个bean,共有一个属性,使用继承
    A类:a,b属性已经set或通过构造方法(属性a,属性b)设置好
    B类:也有a,b同名属性
    那么在beans.xml中使用<bean Parent>,B 继承 A就可以了,不用在xml中从新设置

    抽象属性:<bean abstract="true|false">
    不能得到该类的实例

 

    自动装配bean:
    自动设置依赖关系:例如:A类持有B类的引用,引用属性名字和xml中的B类的id名字相同,那么会自动装配好
    autowire="byName|byType|constructor"
    byName:属性—id 推荐
    byType:找类名匹配,存在问题,当一个类多次出现会报错
    constructor:根据构造方法类型匹配

    依赖检查:dependency-check="all"
    检查所有的set方法是否都被调用了,例如:如果有属性缺少set方法,那么会报异常

    生命周期方法定制:
    两种方式:1.使用bean属性 2.实现接口(不推荐,框架侵入性强:依赖API)
    在构造方法和依赖注入set后调用init,结束时调用destroy。

   <bean id="b" class="test.AImp" autowire="byName" parent="a" dependency-check="all" init-method="init" destroy-method="destroy" >

5、获取bean信息,需要实现以下2个接口

BeanFactoryAware ,获取bean的工厂对象
BeanNameAware ,获取bean的实例名,即配置文件的id

6、aop

在bean构造前,和初始化后添加处理,需要实现BeanPostProcessor接口

7、对bean的属性值进行包装

   test.DateEditor继承PropertyEditorSupport,重写setAsText,getValue方法。
       <bean id="a" class="test.AImp">
         <property name="date">
              <value>2001/10/3</value>
         </property>
     </bean>
     <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
         <property name="customEditors">
              <map>
                   <entry key="java.util.Date">
                       <bean class="test.DateEditor"/>
                   </entry>
              </map>
         </property>
     </bean>

8、属性覆盖

 <bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
         <property name="location">
              <value>test.properties</value>
         </property>
     </bean>
test.properties:
bean的id.属性名=value

9、ApplicationContext

ApplicationContext用来发布事件
ApplicationEvent为事件的抽象类,需要继承此类声明一个事件对象
ApplicationListener监听器监听是否有事件发生,当ApplicationContext发布事件后,会调用实现了此接口的bean中的onApplicationEvent()方法
事件bean实现ApplicationContextAware的类可获得ApplicationContext

10、消息文件的绑定
     有文件message.properties.
       <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
         <property name="basenames">
              <list>
                   <value>message</value>
              </list>
         </property>
     </bean>

11、反射构建bean

     <bean id="props" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
         <property name="targetClass" value="java.lang.System"></property>
         <property name="targetMethod" value="getProperties"/>
     </bean>
     <bean id="classpath" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
         <property name="targetObject"><ref local="props"/></property>
         <property name="targetMethod" value="getProperty"></property>
         <property name="arguments">
              <value>java.class.path</value>
         </property>
     </bean>

        获取方法的返回值
         String classpath = (String)factory.getBean("classpath");
         System.out.println(classpath);

         获取方法返回值的工厂
         FactoryBean o =(FactoryBean)factory.getBean("&classpath");
         String classpath2 = (String)o.getObject();
         System.out.println(classpath2);

12、aop1

StaticMethodMatcherPointcut 切入点
MethodBeforeAdvice  调用之前
MethodInterceptor  方法拦截,动态代理
AfterReturningAdvice 返回值拦截
ThrowsAdvice 异常拦截

     <bean id="befadvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
         <property name="advice">
              <ref local="secuity"></ref>
         </property>
         <property name="pointcut">
              <ref local="pointcutimpl"></ref>
         </property>
     </bean>

     <bean id="factory" class="org.springframework.aop.framework.ProxyFactoryBean">
         <property name="target">
              <ref bean="bean"></ref>
         </property>
         <property name="interceptorNames">
             <list>
                   <value>advice</value>
              </list>
         </property>
     </bean>

参看:http://www.360doc.com/content/08/0721/01/15822_1451898.shtml

你可能感兴趣的:(spring,入门)