java中的接口是类吗
332
2023-03-06
Spring学习笔记之bean的基础知识
Bean:
在Spring技术中是基于组件的
最基本了是最常用的单元
其实实例保存在Spring的容器当中
Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访yoIPAuSHrt问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多
在前面得博客依赖注入与控制反转中演示了应用spring实现ioc,在ApplicationContext.xml中有bean的配置,里面只是bean简单的应用。这篇主要是进一步学习使用bean。
一、定义
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans
http://springframework.org/schema/beans/spring-beans.xsd">
上面的代码是之前博客配置的,可以看到bean的基本构成。
二、创建
Bean的命名机制
id 当在Spring的窗口当中,查找某个Bean对象时,首先根据id进行查找,将其余作为Bean的默认名称,如果ID属性不存在,则根据Name属性进行查找(将其中的第一个名称作为默认的名称),如果ID和NAME都不存在根据类的名称进行查找。id---------->name--------------->类名。
Bean的别名:可以使用alias来为bean指定别名.
下面的配置文件还是在上面的xml基础上修改的。这里配置了ID为ServiceImpl的bean设置了别名yoIPAuSHrt。我们可以使用它的name、id、alias来获取service。
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans
http://springframework.org/schema/beans/spring-beans.xsd">
package Cuiyw.SpringAop;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import Cuiyw.Spring.IService.IService;
public class App
{
public static void main( String[] args )
{
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"ApplicationContext.xml"});
BeanFactory factory=context;
IService service=(IService)factory.getBean("ServiceA1");
service.service("Cuiyw ServiceA1");
service=(IService)factory.getBean("ServiceA");
service.service("Cuiyw ServiceA");
service=(IService)factory.getBean("ServiceImpl");
service.service("Cuiyw ServiceImpl");
}
}
三、注入
1.基本类型和string
可以使用value元素来设置,在上面的代码基础上稍作修改
package Cuiyw.Spring.Service;
import Cuiyw.Spring.IDao.IDao;
import Cuiyw.Spring.IService.IService;
public class ServiceImpl implements IService{
private IDao dao;
private int baseProperty;
public IDao getDao() {
return dao;
}
public void setDao(IDao dao) {
this.dao = dao;
}
public void service(String name) {
System.out.println(dao.sayHello(name)+" baseProperty:"+getBaseProperty());
}
public int getBaseProperty() {
return baseProperty;
}
public void setBaseProperty(int baseProperty) {
this.baseProperty = baseProperty;
}
}
对于string类型,XML解析器以String类型解析出数据,如果属性不是String类型,属性值会通过PropertyEditors转换为其他类型,比如时间类型.
2.注入bean
上面的代码中就注入了bean,在ServiceImpl中注入DaoImpl。可以使用ref来进行配置。
3.注入集合
常见的集合有list、map、set、property等,下面的代码是在ServiceImpl中定义了几个属性,然后在上下文中通过属性注入进去。为了测试,在DaoImpl中也增加了一个属性s。
package Cuiyw.Spring.Dao;
import java.util.Calendar;
import Cuiyw.Spring.IDao.IDao;
public class DaoImpl implements IDao{
public String s;
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public String sayHello(String name) {
int hour=Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if(hour<6) return "凌晨早,"+name;
if(hour<12)return "早上好,"+name;
if(hour<13)return "中午好,"+name;
if(hour<18)return "下午好,"+name;
return "晚上好,"+name+", s="+s;
}
}
package Cuiyw.Spring.Service;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import Cuiyw.Spring.IDao.IDao;
import Cuiyw.Spring.IService.IService;
public class ServiceImpl implements IService{
private IDao dao;
private int baseProperty;
private List
private Set
private Map
private Properties pros;
public IDao getDao() {
return dao;
}
public void setDao(IDao dao) {
this.dao = dao;
}
public void service(String name) {
System.out.println(dao.sayHello(name)+",baseProperty:"+getBaseProperty());
for(int i=0;i { Object obj=lists.get(i); System.out.println(obj.getClass().getName()); } for(Object obj : sets) { System.out.println(obj.getClass().getName()); } //遍历maps中的key for (Object key : maps.keySet()) { System.out.println("Key = " + key); } //遍历maps中的值 for (Object value : maps.values()) { System.out.println("Value = " + value); } Set Iterator while(it.hasNext()){ Object key=it.next(); System.out.println(key+"----"+pros.getProperty((String) key)); } } public int getBaseProperty() { return baseProperty; } public void setBaseProperty(int baseProperty) { this.baseProperty = baseProperty; } public List return lists; } public void setLists(List this.lists = lists; } public Set return sets; } public void setSets(Set this.sets = sets; } public Map return maps; } public void setMaps(Map this.maps = maps; } public Properties getPros() { return pros; } public void setPros(Properties pros) { this.pros = pros; } } 主要是注入的配置,在list、map、set属性中都是配置了一个基础类型value=1,两个DaoImpl类型。 xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd"> 执行main方法可以看到属性都注入进去了。 4.自定义属性编辑器 对于有一些属性是没法注入的,此时就需要自定义,比如上面说的日期类型。 首先是要定义一个继承PropertyEditorSupport的类,重写setAsText方法。 package Cuiyw.Spring.Service; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; public class CustomerProperty extends PropertyEditorSupport { private String format="yyyy-MM-dd"; public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } @Override public void setAsText(String text) throws IllegalArgumentException { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat(format); //super.setAsText(text); try { //转换对象,能过setValue方法重新赋值 this.setValue(sdf.parse(text)); } catch (ParseException e) { e.printStackTrace(); } } } 然后在配置文件配置这个类 这里还是在ServiceImpl中增加了一个java.util.Date类型的date属性。并在配置文件注入值。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
{
Object obj=lists.get(i);
System.out.println(obj.getClass().getName());
}
for(Object obj : sets)
{
System.out.println(obj.getClass().getName());
}
//遍历maps中的key
for (Object key : maps.keySet()) {
System.out.println("Key = " + key);
}
//遍历maps中的值
for (Object value : maps.values()) {
System.out.println("Value = " + value);
}
Set
Iterator
while(it.hasNext()){
Object key=it.next();
System.out.println(key+"----"+pros.getProperty((String) key));
}
}
public int getBaseProperty() {
return baseProperty;
}
public void setBaseProperty(int baseProperty) {
this.baseProperty = baseProperty;
}
public List
return lists;
}
public void setLists(List
this.lists = lists;
}
public Set
return sets;
}
public void setSets(Set
this.sets = sets;
}
public Map
return maps;
}
public void setMaps(Map
this.maps = maps;
}
public Properties getPros() {
return pros;
}
public void setPros(Properties pros) {
this.pros = pros;
}
}
主要是注入的配置,在list、map、set属性中都是配置了一个基础类型value=1,两个DaoImpl类型。
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans
http://springframework.org/schema/beans/spring-beans.xsd">
执行main方法可以看到属性都注入进去了。
4.自定义属性编辑器
对于有一些属性是没法注入的,此时就需要自定义,比如上面说的日期类型。
首先是要定义一个继承PropertyEditorSupport的类,重写setAsText方法。
package Cuiyw.Spring.Service;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class CustomerProperty extends PropertyEditorSupport {
private String format="yyyy-MM-dd";
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat(format);
//super.setAsText(text);
try {
//转换对象,能过setValue方法重新赋值
this.setValue(sdf.parse(text));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
然后在配置文件配置这个类
这里还是在ServiceImpl中增加了一个java.util.Date类型的date属性。并在配置文件注入值。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~