Spring笔记(未完)

★、要使用的jar
dist/spring.jar
lib/jakarta-commons/commons-logging.jar

如果使用aop,还需要
lib/aspectj/aspectjweaver.jar
lib/aspectj/aspectjrt.jar
lib/cglib/cglib-nodep-2.1_3.jar

如果使用了jsr-250中的注解,还需要
lib/j2ee/common-annotabions.jar


★、applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <bean id="" class="">
    <!-- collaborators and configuration for this bean go here -->
  </bean>

  <bean id="" class="">
    <!-- collaborators and configuration for this bean go here -->
  </bean>

  <!-- more bean definitions go here -->

</beans>




★、实例化Spring容器常用的两种方式
方法一:在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

方法二:在文件系统路径下寻找配置文件来实例化容器(不推荐使用,linux下不好使)
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"d:/applicationContext.xml"});



★、实例化bean的三种方式
1. 用构造器来实例化
<bean id="exampleBean" class="examples.ExampleBean"/>

2. 使用静态工厂方法实例化
<bean id="exampleBean"
      class="examples.ExampleBean2"
      factory-method="createInstance"/>

3. 使用实例工厂方法实例化
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator">
  <!-- inject any dependencies required by this locator bean -->
</bean>

<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
      factory-bean="serviceLocator"
      factory-method="createInstance"/>




★、Bean的作用域
singleton(默认为singleton,每次调用都是同一实例)
prototype(每次调用都用容器中获取一个新的实例)
request
session
global session
<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>


1. singleton在spring容器实例化的时候实例化,prototype在getBean的时候才初始化(建议使用,有问题的话可以在启动的时候就看出来)
2. 可以给bean加一个lazy-init="true"来让singleton不要在spring容器初始化的时候实例化(不建议使用)
<bean id="person" class="spring.Person" lazy-init="true"></bean>

3. 如果想为所有bean进行延迟初始化,可以给beans加一个属性default-lazy-init=”true” (不建议使用)
4. 可以给bean加一个属性init-method=”init”和destroy-method=”destroy”在实例化该bean之后调用init方法,spring容器关闭后,会自动调用destroy方法
<bean id="person" class="spring.Person" init-method="init" destroy-method=”destroy”></bean>

public Person(){
//构造函数
}
public void init(){
//调用完构造函数会来调用这个方法,方法名是可以自定义的,可以在这里做一些事情,比如对资源进行打开,等
}
public void destroy(){

}

ApplicationContext ctx = ……
ctx.close();




★、依赖注入
1. 构造器注入
无参
package x.y;

public class Foo {

    public Foo(Bar bar, Baz baz) {
        // ...
    }
}

<beans>
    <bean name="foo" class="x.y.Foo">
        <constructor-arg>
            <bean class="x.y.Bar"/>
        </constructor-arg>
        <constructor-arg>
            <bean class="x.y.Baz"/>
        </constructor-arg>
    </bean>
</beans>


有参
// 有参构造函数
// 当使用简单类型时,比如<value>true<value>,Spring将无法知道该值的类型。不借助其他帮助,他将无法仅仅根据参数类型进行匹配
package examples;

public class ExampleBean {

    // No. of years to the calculate the Ultimate Answer
    private int years;

    // The Answer to Life, the Universe, and Everything
    private String ultimateAnswer;

    public ExampleBean(int years, String ultimateAnswer) {
        this.years = years;
        this.ultimateAnswer = ultimateAnswer;
    }
}

// 可以通过使用'type'属性来显式指定那些简单类型的构造参数的类型,比如:
<bean id="exampleBean" class="examples.ExampleBean">
  <constructor-arg type="int" value="7500000"/>
  <constructor-arg type="java.lang.String" value="42"/>
</bean>

// 还可以通过index属性来显式指定构造参数的索引,比如下面的例子:
<bean id="exampleBean" class="examples.ExampleBean">
  <constructor-arg index="0" value="7500000"/>
  <constructor-arg index="1" value="42"/>
</bean>


2. setter注入
public class ExampleBean {

    private AnotherBean beanOne;
    private YetAnotherBean beanTwo;
    private int i;

    public void setBeanOne(AnotherBean beanOne) {
        this.beanOne = beanOne;
    }

    public void setBeanTwo(YetAnotherBean beanTwo) {
        this.beanTwo = beanTwo;
    }

    public void setIntegerProperty(int i) {
        this.i = i;
    }    
}

<bean id="exampleBean" class="examples.ExampleBean">

  <!-- setter injection using the nested <ref/> element -->
  <property name="beanOne"><ref bean="anotherExampleBean"/></property>

  <!-- setter injection using the neater 'ref' attribute -->
  <property name="beanTwo" ref="yetAnotherBean"/>
  <property name="integerProperty" value="1"/>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>



3. Field注入(用于注解方式),用@Resource注解完成属性装配
可以减少applicationContext.xml的代码






剩下的有时间再发


★、Spring自动扫描和管理bean


★、基于注解使用AOP


★、基于XML使用AOP


★、Spring和JDBC组合开发和事物管理


你可能感兴趣的:(spring,AOP,bean,xml,prototype)