Spring学习笔记之bean的基础知识

网友投稿 305 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的基本构成。 是Sring配置文件的根节点,一个节点里面可以有多个节点。在bean中常用两个属性:ID,Class. ID是一唯一标识,来确定是哪个bean,可以让其他bean中使用id引用。class用来指定是哪个class。同时还可以设置scope属性,scope有两种:singleton,non-singelton。singleton:单实例模式(默认,构造方法为private),整个Spring的容器中只有一个共享实例存在(singleton)。non-singelton:每次请求该bean,Spring容器都会新建立一个bean实例,然后返回给程序(request,session,prototype)。

二、创建

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 lists;

private Set sets;

private Map maps;

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 pro=pros.stringPropertyNames();

Iterator it=pro.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 getLists() {

return lists;

}

public void setLists(List lists) {

this.lists = lists;

}

public Set getSets() {

return sets;

}

public void setSets(Set sets) {

this.sets = sets;

}

public Map getMaps() {

return maps;

}

public void setMaps(Map maps) {

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

1

1

prokeyA

prokeyB

执行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 pro=pros.stringPropertyNames();

Iterator it=pro.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 getLists() {

return lists;

}

public void setLists(List lists) {

this.lists = lists;

}

public Set getSets() {

return sets;

}

public void setSets(Set sets) {

this.sets = sets;

}

public Map getMaps() {

return maps;

}

public void setMaps(Map maps) {

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

1

1

prokeyA

prokeyB

xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

1

1

prokeyA

prokeyB

执行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小时内删除侵权内容。

上一篇:入库接口测试用例图解法(入库管理用例图)
下一篇:调用微信登录接口开发(app微信登录接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~