你的位置:首页 > Java教程

[Java教程]Spring Basic


@ 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 ClassPath);    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=""

  <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 ClassPath

  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