您的位置:首页 > 编程语言 > Java开发

Spring4学习笔记

2016-02-04 11:02 633 查看
Hello World




HelloWorld.java
<!--配置Peoperties属性值-->
<bean id="dataSource" class="com.atguigu.spring.collections.dataSource">
    <property name="peoperties">
        <props>
            <prop key="user">root</prop>
            <prop key="password">123456</prop>
            <prop key="jdbcUrl">jdbc:mysql:///test</prop>
            <prop key="driverClass">com.mysql.jdbc.Driver</prop>
        </props>
    </property>
</bean>
<!--配置单例的集合bean,以供多个bean进行引用,需要导入util命名空间-->
<util:list id="cars">
    <ref bean="car">
    <ref bean="car2">
</util:list>
<bean id="person4" class="com.atguigu.spring.collections.Person">
    <property name="name" value="Jack"></property>
    <property name="age" value="29"></property>
    <property name="cars" ref="cars"></property><!--引用上面配置的cars-->
</bean>
<!--通过P命名空间为bean的属性赋值,需要先导入P命名空间-->
<bean id="person5" class="com.atguigu.spring.collections.Person" p:age="35" p:name="Shang" p:cars-ref="cars">
</bean>


<bean id="address" class="com.atguigu.spring.beans.autowire.Address" p:city="Beijing" p:street="Wudaokou">
</bean>
<!--bean配置的继承:使用bean的parent属性指定继承哪个bean的配置-->
<bean id="address2" p:street="Dazhongsi" parent="address"></bean>
<bean id="car" class="com.atguigu.spring.autowire.Car" p:brand="Audi" p:price="30000"></bean>
<!--要求在配置person时,必须有一个关联的car。person这个bean依赖于car这个bean-->
<bean id="person" class="som.atguigu.spring.beans.autowire.Person" p:name="Tom" p:address-ref="address2" depends-on="car"></bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="root"></property>
    <property name="password" value="123456"></property>
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql:///test"></property>
</bean>
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-properties.xml");
DataSource dataSource = (DataSource)ctx.getBean("dataSource");
System.out.println(dataSource.getConnection());//建立连接
<!--导入属性文件--><!--要导入context命名空间-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${user}"></property>
    <property name="password" value="${password}"></property>
    <property name="driverClass" value="${driverClass}"></property>
    <property name="jdbcUrl" value="${jdbcUrl}"></property>
</bean><property name="frequency" value="#{89.7}"/><property name="name" value="#{'chuck'}"/>
<property name="name" value='#{"chuck"}'/><!--通过value属性和SpEL配置bean之间的引用关系-->
<property name="prefix" value="#{prefixGernerator}"/><property name="suffix" value="#{prefixGernerator.toString()}"/>
<!---方法的连缀-->
<property name="suffix" value="#{prefixGernerator.toString().toUpperCase()}"/>
<property name="price" value="#{T(java.jang.Math).PI*80}"></property>
<!--使用SpEL表达式来引用其他的bean-->
<property name="car" value="#{car}"></property>
<!--使用SpEL表达式来引用其他的bean的属性-->
<property name="city" value="#{address.city}"></property>
<!--在SpEL中使用运算符-->
<property name="info" value="#{car.price>300000?'金玲':'白领'}"></property>
public class MyBeanPostProcessor implements BeanPostProcessor{
    //处理所有bean
    @override
    public Object postProcessBeforeInitialization(Object bean, Stirng beanName)throws BeansException{
    //可以在这里进行一些操作
    if("car".equals(beanName)){
    //...
    }
        System.out.println("postProcessBeforeInitialization...");
        return bean;
    }
    
    
    @override
    public Object postProcessAfterInitialization(Object bean, Stirng beanName)throws BeansException{
        System.out.println("postProcessAfterInitialization...");
        //可以在这里对bean的属性进行更改...安全隐患
        return bean;
    }
}
<!--配置文件中配置bean的后置处理器。不需要配置id,IOC容器自动识别是一个BeanPostProcessor-->
<!--
实现BeanPostProcessor接口,并且提供实现
Object postProcessBeforeInitialization(Object bean, Stirng beanName)  init-method之前调用
Object postProcessAfterInitialization(Object bean, Stirng beanName)  init-method之后调用
bean: bean实例本身
beanName:IOC容器配置的bwan的名字
返回值:实际上返回给用户的bean。可以在以上两个方法中修改返回的bean,甚至返回一个新的bean
-->
<bean class="com.atguigu.spring.MyBeanPostProcessor"></bean>
<!--通过静态工厂方法来配置bean-->
<!--
    class属性:指向静态工程方法的全类名
    factory-method:静态工厂方法的名字
    constructor-arg:如果工厂方法需要传入参数,使用constructor-arg来配置参数
-->
<bean id="car1"
    class="com.atguigu.spring.StaticCarFactory"
    factory-method="getCar">
    <constructor-arg value="audi"></constructor-arg>
</bean>
Car car = (Car)ctx.getBean("car1");//取对象

<bean id="carFactory" class="com.atguigu.spring.InstanceCarFactory"></bean>
<!--通过实例工厂方法来配置bean-->
<!--
    factory-bean属性:指向实例工程方法的全类名
    factory-method:方法的名字
    constructor-arg:如果工厂方法需要传入参数,使用constructor-arg来配置参数
-->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
    <constructor-arg value="audi"></constructor-arg>
</bean>
Car car = (Car)ctx.getBean("car2");//取对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: