Spring4学习笔记
2016-02-04 11:02
633 查看
Hello World
HelloWorld.java
<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>
<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()}"/>
//处理所有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;
}
}
<!--
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>
<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>
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");//取对象
相关文章推荐
- Java对象与xml文件互转
- Java读取接口数据并保存到数据库
- Java高级应用
- Java算法 从一个数组中随机选择一部分数
- Spring应用
- Java读取GIS服务器数据
- 初识Java Webservice项目
- Java笔记
- Struts2中验证码的实现
- 我的Java工具包
- struts2笔记(2)
- Java使用正则表达式
- Java NIO:浅析I/O模型
- java迭代子模式详解
- servlet 和eclipse编译非src下的java文件
- java.util.Formatter 使用注意事项
- java 和js的交互
- Eclipse和MyEclipse快捷键大全
- webservice之cxf实现[web项目中基于maven与spring整合]
- Spring整合Mybatis错误