码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Basic

时间:2015-09-05 13:49:03      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

@ Spring IOC&DI

  1.IOC(Inverse of Control):其思想是反转资源获取的方向。

  2.DI(Dependency Inject):IOC的另一种表达方式

@Spring 配置Bean

  1.属性注入<property name="" value="">

  2.构造方法注入<constructor-arg value="" index(根据顺序赋值)="" type(根据类型赋值)="">

  3.工厂模式注入

  details:

    1).如果值包括特殊字符<![CDATA[]]>包裹起来。

    2).属性值可以用value节点进行配置

    3).赋值null的专有标记<constructor-arg><null/></constructor-arg>

    4).为级联属性赋值,属性需要先初始化后才可以级联属性,否则出现异常,和struts2不同。

    5).如果有带参的构造函数,一定要有不带参的,否则配置bean会出错。

    <constructor-arg ref ="car"><property name="car.name" value="">

  4.bean之间引用关系<property name="‘" ref(引用的对象)=""> or 子节点<ref bean="">

  5.内部bean

技术分享
<bean id="" class="">
    <property name = "">
        <bean class="">
               <constructor-arg value=""/>
        </bean>
     </property>
</bean>
iner bean

   6.集合属性

     1).set,List,Map,props,p

技术分享
public class DataSource {
    private Properties properties;
    public Properties getProperties() {
        return properties;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    @Override
    public String toString() {
        return "DataSource [properties=" + properties + "]";
    }
}

public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        DataSource dataSource = ctx.getBean(DataSource.class);
        System.out.println(dataSource);
    }

    <bean id="dataSource" class="com.nyan.bean.DataSource">
        <property name="properties">
            <props>
                <prop key="driverClass">jdbc:mysql:///test</prop>
                <prop key="jdbcUrl">com.mysql.jdbc.Driver</prop>
                <prop key="user">root</prop>
                <prop key="password">passw0rd</prop>
            </props>
        </property>
    </bean>
props config

    2).(集合)配置单例的bean,以供多个bean进行引用,需要导入util命名空间,内部bean是不可以被引用的

<util:list id="cars">

  <ref bean ="car1">

  <ref bean ="car2">

</util:list>

<bean id="" class="Person"

  <property name ="cars" ref ="cars">

</bean>

@ 自动装配

  1.<bean>的autowire属性里指定自动装配的模式

  2.byType 根据bean的类型和当前bean的属性的类型进行自动装配,当类型(对象有多个bean)不是唯一时,不建议使用。

  3.byName 根据bean的名字和当前bean的setter风格的属性名进行自动装配(bean的 id 与对象的属性一致),constructor

  4.若有匹配的则自动装配,若,没有则不装配

@ bean之间的关系(配置上继承,依赖)

  1.继承: 子bean可以忽略class,通过父bean获得。

  2.依赖:depends-on设定Bean前置依赖的Bean,前置依赖Bean会在Bean实例化之前创建好。如果前置依赖于多个bean。则可以通过逗号,空格的方式配置Bean的名称。

技术分享
<!-- 抽象bean:bean的abstract属性为true的bean,不能被ico容器实例化,只能用来被继承配置 -->
    <bean id="address" class="com.nyan.bean.autowire.Address"
    p:city="ShenZhen" p:stree="NamLu3002" abstract="true"></bean>
    
    <bean id="address1" class="com.nyan.bean.autowire.Address"
    p:city="ShangHei" parent="address"></bean>
    
    <bean id="car" class="com.nyan.bean.autowire.Car"
    p:brand="OUDI" p:price="32000.0"></bean>
    
    <bean id="person" class="com.nyan.bean.autowire.Person"
    p:name="Nyan" p:address-ref="address1" depends-on="car"></bean>
abstract&depends

@ bean 的作用域

   1.singleton:容器初始化时(在new ClassPathXmlApplicationContext()时)创建bean实例,整个容器的生命周期内只创建这一个bean,是单例的。

  2.prototype:原型的,容器初始化时不创建bean实例,而在每次getBean()请求时都创建新的bean实例,并返回。

@ 使用外部属性文件(系统部署的细节信息,如连接数据源)${键名}取值

技术分享
<!-- 导入属性文件 -->
    <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>
import outer file

@ SpEL(spring 表达式语言)动态赋值

  1.引用bean、属性和方法(引用其他对象及属性,调用方法链式操作)

  2、支持的运算符号

技术分享
<bean id="address" class="com.nyan.bean.spel.Address">
        <!-- 使用spel为属性赋一个字面值 -->
        <property name="city" value="#{‘BeiJing‘}"></property>
        <property name="stree" value="DIWjijoJOJPO"></property>
    </bean>
    <bean id="car" class="com.nyan.bean.spel.Car">
        <property name="brand" value="OUDI"></property>
        <property name="price" value="43000.0"></property>
        <!-- 使用SpEL引用类的静态属性 -->
        <property name="typePermiter" value="#{T(java.lang.Math).PI*80}"></property>
    </bean>
    <bean id="person" class="com.nyan.bean.spel.Person">
        <property name="car" value="#{car}"></property>
        <property name="city" value="#{address.city}"></property>
        <!-- 使用运算符 -->
        <property name="info" value="#{car.price>30000?‘金领‘:‘白领‘}"></property>
    </bean>
SpEL

 

Spring Basic

标签:

原文地址:http://www.cnblogs.com/Nyan-Workflow-FC/p/4782659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!