Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。
将这些架包放入在工程目录下建立的lib文件夹里,并解压
commons-logging-1.1.1
spring-aop-4.0.0.RELEASE
spring-beans-4.0.0.RELEASE
spring-context-4.0.0.RELEASE
spring-core-4.0.0.RELEASE
spring-expression-4.0.0.RELEASE
1.SpEL,实现
Person类,其属性如下,其get,set,tostrong方法就不写了
private String name;
private Car car;
private String city;//city属性是引用了Address中city的属性
private String info;//根据car的price属性来确定info,price大于30万,不大于30万
car类,其属性如下,set,get,tostring方法就不写了
private String brand;
private double price;
private double tyrePerimeter;//轮胎的周长
address类,其属性如下,set,get,tostring方法就不下了
private String city;
private String street;
建立spring bean configuration file文件:beans.xml
<!-- spEL的使用#{…} -->
<bean id="address" class="com.atguigu.spring.beans.Address">
<property name="city" value="#{'BeiJing'}"></property>
<property name="street" value="jianglingjialu"></property>
</bean>
<bean id="car" class="com.atguigu.spring.beans.Car">
<property name="brand" value="auti"></property>
<property name="price" value="345566"></property>
<property name="tyrePerimeter" value="#{T(java.lang.Math).PI * 30}"></property>
</bean>
<bean id="person" class="com.atguigu.spring.beans.Person">
<property name="name" value="#{'panpan'}"></property>
<property name="car" value="#{car}"></property>
<property name="city" value="#{address.city}"></property>
<property name="info" value="#{car.price>300000 ? '金领' : '蓝领' }"></property>
</bean>
在src目录下的Main类 测试方法;
ApplicationContext app=new ClassPathXmlApplicationContext("beans.xml");
Address address=(Address) app.getBean("address");
System.out.println(address);
Car car=(Car) app.getBean("car");
System.out.println(car);
Person person=(Person) app.getBean("person");
System.out.println(person);
----------------------------------------------------------------------------------
2.静态工厂方式,spring的bean的配置方法;
建立StaticCarFactory类:
package com.atguigu.spring.beans; import java.util.HashMap;
import java.util.Map; public class StaticCarFactory {
//静态工厂方式,spring的bean的配置方法
private static Map<String, Car> cars=new HashMap<String, Car>();
static{
cars.put("KKK", new Car("changan",423423,432.43));
cars.put("PPP", new Car("fute",42323,32.43));
}
//在xml文件中,可以设置和获取getCar方法
public static Car getCar(String name){
return cars.get(name);
}
}
在beans.xml 文件中配置bean;
<!-- 静态工厂方式 -->
<bean id="car1" class="com.atguigu.spring.beans.StaticCarFactory"
factory-method="getCar">
<constructor-arg value="PPP"></constructor-arg>
</bean>
在 Main类 中测试;
ApplicationContext app=new ClassPathXmlApplicationContext("beans.xml");
Car car1=(Car) app.getBean("car1");
System.out.println(car1);
-------------------------------------------------------------------------------------
3.实例工厂的方法,实现bean的配置;
建立类:InstanceFactory
package com.atguigu.spring.beans; import java.util.HashMap;
import java.util.Map; public class InstanceFactory {
private Map<String, Car> cars=null; //实例工厂的方法
public InstanceFactory() {
cars=new HashMap<String, Car>(); cars.put("KKK", new Car("luhu", 434233, 43.2));
cars.put("QQQ", new Car("fute", 656546, 45.4));
} public Car getCar(String brand){
return cars.get(brand);
}
}
在beans.xml 文件中配置bean;
<!-- 实例工厂的方式 -->
<bean id="factory" class="com.atguigu.spring.beans.InstanceFactory"></bean> <bean id="car2" factory-bean="factory" factory-method="getCar">
<constructor-arg value="QQQ"></constructor-arg>
</bean>
在类Main中,测试:
ApplicationContext app=new ClassPathXmlApplicationContext("beans.xml");
Car car2=(Car) app.getBean("car2");
System.out.println(car2);
------------------------------------------------------------------------------------------
4.FactoryBean的配置方法:继承接口:FactoryBean,泛型为Car;
package com.atguigu.spring.beans; import org.springframework.beans.factory.FactoryBean; //FactoryBean的配置方法
public class CarFactoryBean implements FactoryBean<Car>{ private String brand; public void setBrand(String brand) {
this.brand = brand;
} @Override
//返回bean的对象,即car
public Car getObject() throws Exception {
return new Car(brand, 200000, 1.2);
} @Override
//返回bean的类型
public Class<?> getObjectType() {
return Car.class;
} @Override
//是不是但实力的
public boolean isSingleton() {
return true;
} }
在beans.xml 文件中配置bean;
<!-- FactoryBean的配置方法 -->
<bean id="car3" class="com.atguigu.spring.beans.CarFactoryBean">
<property name="brand" value="panpan"></property>
</bean>
在类Main中,测试:
ApplicationContext app=new ClassPathXmlApplicationContext("beans.xml");
Car car3=(Car) app.getBean("car3");
System.out.println(car3);
Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。的更多相关文章
- Spring5源码解析-Spring框架中的单例和原型bean
Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...
- Bean XML 配置(2)- Bean作用域与生命周期回调方法配置
系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...
- Spring - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配1.1 使用:只需在<bean>中使用autowire元素<bean id="student" class="com.kej ...
- 《Java Spring框架》SpringXML配置详解
Spring框架作为Bean的管理容器,其最经典最基础的Bean配置方式就是纯XML配置,这样做使得结构清晰明了,适合大型项目使用.Spring的XML配置虽然很繁琐,而且存在简洁的注解方式,但读懂X ...
- Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...
- 基于Spring框架的Shiro配置
一.在web.xml中添加shiro过滤器 <!-- Shiro filter--> <filter> <filter-name>shiroFilter</ ...
- spring框架 事务 注解配置方式
user=LF password=LF jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl driverClass=oracle.jdbc.driver.Ora ...
- 基于Spring框架的Shiro配置(转发:http://kdboy.iteye.com/blog/1103794)
一.在web.xml中添加shiro过滤器 <!-- Shiro filter--> <filter> <filter-name>shiroFilter</f ...
- spring框架 事务 xml配置方式
user=LF password=LF jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl driverClass=oracle.jdbc.driver.Ora ...
- Spring中使用@Value读取porperties文件中的属性值方法总结及注意事项
本文为博主原创,转载请注明出处. 此前曾总结过使用工具类读取properties文件中的属性值,有兴趣的可以看一下. 如何快速获取properties中的配置属性值:https://www.cnblo ...
随机推荐
- mysql导sql脚本
在navicat或sql yog ,或dos窗口中,如下 命令 ->mysql source d:\test.sql;
- keil 编译的一些错误
以前使用的是MDK4.5 但是没有stm32F3的元器件,果断的使用了4.6版本了.但是编译之后出现这样错误:linking....\Obj\prj.axf: Warning: L6373W: lib ...
- SQL 数据库 函数
1.数学函数:操作一个数据,返回一个结果 --取上限ceiling select code,name,ceiling(price) from car ; --取下限 floor select floo ...
- C++向量(Vector)
向量Vector: 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template L ...
- 。。。验证码,发送不同的GET请求。。。
今天讲课的时候,突然发现了一个新的知识点,但是作为老师的我也不会,呵呵.然而我在VIP群里问了,发现人家都会,说的是非常的精炼,是的,他们确实厉害! function changeNum(){ ...
- CCF真题之ISBN号码
201312-2 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上 ...
- 玩转HTML5移动页面(动效篇)(转载)
本文转载自: 玩转HTML5移动页面(动效篇)
- 在GitHub上建立个人主页的方法(转载)
GitHub就不需要介绍了,不清楚可以百度一下.只说目前GitHub是最火的开源程序托管集中地了,连PHP的源码都在GitHub上面托管了(https://github.com/php ). GitH ...
- paper 9:SVM番外篇:支持向量机系列六:Duality —— 关于 dual 问题推导的一些补充理论。
在之前关于 support vector 的推导中,我们提到了 dual ,这里再来补充一点相关的知识.这套理论不仅适用于 SVM 的优化问题,而是对于所有带约束的优化问题都适用的,是优化理论中的一个 ...
- 关于在windows下使用mingw并行编译wxwidgets时的错误
清理用的命令:mingw32-make -j4 -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 clean 2>nul ...