返回顶部
首页 > 资讯 > 精选 >Spring中bean基础知识的示例分析
  • 762
分享到

Spring中bean基础知识的示例分析

springbean 2023-05-30 18:05:46 762人浏览 安东尼
摘要

这篇文章主要为大家展示了“spring中bean基础知识的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring中bean基础知识的示例分析”这篇文章吧。Bean:在Spring技术

这篇文章主要为大家展示了“spring中bean基础知识的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring中bean基础知识的示例分析”这篇文章吧。

Bean:

  • 在Spring技术中是基于组件的

  • 最基本了是最常用的单元

  • 其实实例保存在Spring的容器当中

Bean通常被定义在配置文件当中,Bean实例化由Spring的ioc容器进行管理,Bean的实例可以通过Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多

在前面得博客依赖注入与控制反转中演示了应用spring实现ioc,在ApplicationContext.xml中有bean的配置,里面只是bean简单的应用。这篇主要是进一步学习使用bean。

一、定义

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="Http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="DaoImpl" class="Cuiyw.Spring.Dao.DaoImpl"></bean><bean id="ServiceImpl" class="Cuiyw.Spring.Service.ServiceImpl" scope="singleton"><property name="dao" ref="DaoImpl"></property></bean></beans>

上面的代码是之前博客配置的,可以看到bean的基本构成。 <beans/>是Sring配置文件的根节点,一个<beans/>节点里面可以有多个<bean>节点。在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设置了别名。我们可以使用它的name、id、alias来获取service。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="DaoImpl" class="Cuiyw.Spring.Dao.DaoImpl"></bean><bean id="ServiceImpl" class="Cuiyw.Spring.Service.ServiceImpl" scope="singleton" name="ServiceA"><property name="dao" ref="DaoImpl"></property></bean><alias name="ServiceA" alias="ServiceA1"/></beans>
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");  }}

Spring中bean基础知识的示例分析

三、注入

1.基本类型和string

可以使用value元素来设置,在上面的代码基础上稍作修改

<property name="baseProperty" value="222"></property>
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; }}

Spring中bean基础知识的示例分析

对于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<Object> lists; private Set<Object> sets; private Map<Object, Object> 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<lists.size();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<String> pro=pros.stringPropertyNames();   Iterator<String> 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<Object> getLists() {  return lists; } public void setLists(List<Object> lists) {  this.lists = lists; } public Set<Object> getSets() {  return sets; } public void setSets(Set<Object> sets) {  this.sets = sets; } public Map<Object, Object> getMaps() {  return maps; } public void setMaps(Map<Object, Object> maps) {  this.maps = maps; } public Properties getPros() {  return pros; } public void setPros(Properties pros) {  this.pros = pros; }}

主要是注入的配置,在list、map、set属性中都是配置了一个基础类型value=1,两个DaoImpl类型。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="DaoImpl" class="Cuiyw.Spring.Dao.DaoImpl"> <property name="s" value="cyw"></property></bean><bean id="ServiceImpl" class="Cuiyw.Spring.Service.ServiceImpl" scope="singleton" name="ServiceA"> <property name="dao" ref="DaoImpl"></property> <property name="baseProperty" value="222"></property> <property name="lists">   <list>   <value>1</value>   <ref bean="DaoImpl" />   <bean class="Cuiyw.Spring.Dao.DaoImpl">    <property name="s" value="cuiywlists" />   </bean>  </list> </property> <property name="sets">   <set>   <value>1</value>   <ref bean="DaoImpl" />   <bean class="Cuiyw.Spring.Dao.DaoImpl">    <property name="s" value="cuiywsets" />   </bean>  </set> </property> <property name="maps">   <map>   <entry key="key1" value="1"></entry>   <entry key="key2" value-ref="DaoImpl"></entry>   <entry key="key3" >   <bean class="Cuiyw.Spring.Dao.DaoImpl">    <property name="s" value="cuiywmaps" />   </bean>   </entry>  </map> </property> <property name="pros">  <props>   <prop key="prokey1">prokeyA</prop>   <prop key="prokey2">prokeyB</prop>  </props> </property></bean><alias name="ServiceA" alias="ServiceA1"/></beans>

执行main方法可以看到属性都注入进去了。

Spring中bean基础知识的示例分析

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();  } }}

然后在配置文件配置这个类

<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.util.Date" value="Cuiyw.Spring.Service.CustomerProperty"/> </map> </property></bean>

这里还是在ServiceImpl中增加了一个java.util.Date类型的date属性。并在配置文件注入值。

<property name="date" value="2017-12-10"/>

以上是“Spring中bean基础知识的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Spring中bean基础知识的示例分析

本文链接: https://lsjlt.com/news/220265.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring中bean基础知识的示例分析
    这篇文章主要为大家展示了“Spring中bean基础知识的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring中bean基础知识的示例分析”这篇文章吧。Bean:在Spring技术...
    99+
    2023-05-30
    spring bean
  • mysql中基础知识的示例分析
    这篇文章将为大家详细讲解有关mysql中基础知识的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql架构一、网络连接层客户端连接器(Client Conne...
    99+
    2024-04-02
  • java中基础知识的示例分析
    这篇文章主要为大家展示了“java中基础知识的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中基础知识的示例分析”这篇文章吧。一.异常Java对异常的处理同Delphi一样,不是...
    99+
    2023-06-03
  • AngularJS基础知识的示例分析
    这篇文章主要介绍了AngularJS基础知识的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。指令AngularJS 指令是扩展的 H...
    99+
    2024-04-02
  • javascript中json基础知识的示例分析
    这篇文章将为大家详细讲解有关javascript中json基础知识的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。大致介绍JSON(JavaScript Obje...
    99+
    2024-04-02
  • Java中基础知识点的示例分析
    这篇文章主要为大家展示了“Java中基础知识点的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中基础知识点的示例分析”这篇文章吧。1、String类1.1两种对象实例化方式对于S...
    99+
    2023-06-20
  • HTML基础知识点的示例分析
    这篇文章将为大家详细讲解有关HTML基础知识点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   一、HTML是谁发明的   1990年Tim Berner...
    99+
    2024-04-02
  • Python基础知识点的示例分析
    这篇文章给大家分享的是有关Python基础知识点的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、python中的标志符:给变量取的名字就是标志符区分大小写,MyName和myname是两个不同的标志符...
    99+
    2023-06-29
  • HTML基础知识之DIV的示例分析
    小编给大家分享一下HTML基础知识之DIV的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一、HTML 块元素 ...
    99+
    2024-04-02
  • html基础图像知识的示例分析
    这篇文章将为大家详细讲解有关html基础图像知识的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   要在页面上显示图像,你需要使用源属性(src)。src指&...
    99+
    2024-04-02
  • navicat for mysql基础知识的示例分析
    这篇文章主要介绍了navicat for mysql基础知识的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、数据库的操作新建数据库打开数据库右键或者双击就可以了。...
    99+
    2023-06-15
  • Python基础知识实例分析
    这篇文章主要介绍了Python基础知识实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python基础知识实例分析文章都会有所收获,下面我们一起来看看吧。在Python 语言中,对象是通过引用传递的。多元...
    99+
    2023-06-17
  • mysql数据库基础知识点的示例分析
    这篇文章将为大家详细讲解有关mysql数据库基础知识点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数据库一、 修改数据表添加一列:ALTERTABL...
    99+
    2024-04-02
  • HTTP报文及ajax基础知识的示例分析
    小编给大家分享一下HTTP报文及ajax基础知识的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!HTTP报文客户端传递给...
    99+
    2024-04-02
  • Android基础知识及线性布局的示例分析
    这篇文章主要介绍Android基础知识及线性布局的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.常见控件的基本属性android:id="@+id/button1":【设置控件id】a...
    99+
    2023-06-26
  • oracle中SGA区基础知识与查看命令的示例分析
    这篇文章将为大家详细讲解有关oracle中SGA区基础知识与查看命令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Instance:数据库启动后在内存中的映像,以及管理该内存区的后台进程;组成:...
    99+
    2023-06-06
  • Spring Bean中Bean的实例化分析
    这篇文章主要介绍了Spring Bean中Bean的实例化分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Bean中Bean的实例化分析文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-29
  • 分析HTML基础知识DIV
    这篇文章主要介绍“分析HTML基础知识DIV”,在日常操作中,相信很多人在分析HTML基础知识DIV问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析HTML基础知识DIV”...
    99+
    2024-04-02
  • Python基础知识点分析
    本篇内容介绍了“Python基础知识点分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python简介Python的历史1989年圣诞节:...
    99+
    2023-06-02
  • JavaScript基础知识点分析
    这篇“JavaScript基础知识点分析”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“JavaScript基础知识点分析”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作