标签:
@ 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>
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>
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>
@ 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>
@ 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>
标签:
原文地址:http://www.cnblogs.com/Nyan-Workflow-FC/p/4782659.html