Bean实例化(三种方式)

  1、使用类的无参构造进行创建(大多数情况下)

  <bean id="user" class="com.bjxb.ioc.User"></bean>

    (1)上面的代码使用的就是默认的无参构造的方式进行Bean的实例化

    (2)使用这种方法我们需要注意,如果类中没有无参构造,会出现异常

  2、使用静态工厂创建

    (1)创建静态的方法,返回类的对象,以User对象为例

  public class UserFactory {
  
   // 静态方法,返回User对象
   public static User getUser() {
   return new User();
   }
  }

    (2)配置文件中使用静态工厂创建对象

<bean id="user" class="com.bjxb.ioc.UserFactory" factory-method="getUser"></bean>

  3、使用实例工厂创建

    (1)创建普通方法,返回类的对象,以User对象为例

public class UserFactory {

    // 普通方法,返回User对象
public User getUser() {
return new User();
}
}

    (2)配置文件中使用实例工厂创建对象

     <!-- 创建工厂对象 -->
<bean id="userFactory" class="com.bjxb.ioc.UserFactory"></bean>
<!-- 配置Bean对象 -->
<bean id="user" class="com.bjxb.ioc.User" factory-bean="userFactory" factory-method="getUser"></bean>

Bean标签的常用属性

  1、id属性

    给当前bean起名称,不能包含特殊符号,我们可以根据id值得到配置对象.

  2、class属性

    给当前bean指定对象所在类的全路径.

  3、name属性

    给当前bean起名称(与id属性类似),但是id属性值不能包含特殊符号,而在name属性值里面可以包含特殊符号。在Struts1框架中,action起名可以写符号(比如加上#),为了整合Struts1,解决遗留问题,扩展了name属性值。

  4、scope属性

    scope属性可以指定Bean的作用范围

    (1)singleton:默认值,单例,对象只创建一次。

    (2)prototype:多例的。每次使用都会创建一个新的对象。

    (3)request:WEB项目中,Spring创建一个Bean的对象,将对象存到request域中。

    (4)session:WEB项目中,Spring创建一个Bean的对象,将对象存到session域中。

    (5)globalSession:WEB项目中,应用在Prolet环境,如果没有Prolet环境,那么globalSession相当于session。

Bean的属性注入

  1、创建对象的时候,类中的属性被设置了默认值,称为bean的属性注入

  2、属性注入的三种方式(Spring只支持前两种,用的最多的是第一种——set方法注入):

    (1)Setter注入:使用属性的set方法进行注入。

public class TestUser {

    private String name;

    public void setName(String name) {
this.name=name;
}
} public static void main(String[] args) {
TestUser user = new TestUser();
user.setName("花咖");
}

    (2)构造器注入:使用有参数的构造器进行注入。

public class TestUser {

    private String name;

    public TestUser(String name) {
this.name = name;
}
} public static void main(String[] args) {
TestUser user = new TestUser("花咖");
}

    (3)接口注入:让类继承带有方法的接口,在实现类继承的方法中,进行属性注入。

public interface UserDao {

    void InjectTest(String name);
} public class TestUser implements UserDao{ private String name; @Override
public void InjectTest(String name) {
// TODO Auto-generated method stub
this.name=name;
}
}

  3、Spring中Bean的属性注入如何运用

    (1)Set方法注入

  实体类:

public class PropertyDemo1 {

    private String bookname;

    // set方法
public void setBookname(String bookname) {
this.bookname = bookname;
} }

  配置类中代码(默认是applicationContext.xml):

<!-- 使用set方法注入属性 -->
<bean id="demo1" class="com.bjxb.ioc.PropertyDemo1">
<!-- 注入属性值
name属性,类里面定义的属性名称
value属性,设置具体的值
-->
<property name="bookname" value="大话设计模式"></property>
</bean>

    (2)有参构造方式注入

  实体类:

public class PropertyDemo2 {

    private String uname;

    public PropertyDemo2(String uname) {
this.uname = uname;
}
}

  

  配置类中代码(默认是applicationContext.xml):

<beans>
<!-- 使用有参数构造注入属性 -->
<bean id="demo2" class="com.bjxb.ioc.PropertyDemo2">
<!-- 使用有参构造注入 -->
<constructor-arg name="uname" value="花咖"></constructor-arg>
</bean>
</beans>

  4、重点——注入对象类型的属性

    (1)service 中 注入 dao 层的类

  UserDao:

public class UserDao {

    public void add() {
System.out.println("dao.add........");
}
}

    

  UserService:

public class UserService {

    // 1.定义dao类型属性
public UserDao dao; // 2.生成set方法
public void setDao(UserDao dao) {
this.dao = dao;
} public void add() {
System.out.println("service.add.......");
dao.add();
} }

  配置类中代码(默认是applicationContext.xml):

<!-- 注入对象类型的属性 -->
<!-- 配置service和dao对象 -->
<bean id="userDao" class="com.bjxb.ioc.UserDao"></bean>
<bean id="userService" class="com.bjxb.ioc.UserService">
<!-- 注入dao对象
name属性值:service类里面的属性名称
现在不要写value属性,因为刚才是字符串,现在是对象
写ref属性,配置dao的bean标签中的id值
-->
<property name="dao" ref="userDao"></property>
</bean>

  5、使用P命名空间进行属性注入(对于Setter注入的简化)

    (1)首先在beans标签中加入如下属性(复制上一行的beans命名空间):

    (2)然后我们在注入属性时使用 P 命名空间的方式:

      实体类:

public class Person {

    private String pname;

    public void setPname(String pname) {
this.pname=pname;
} }

      

      配置类中代码(默认是applicationContext.xml):

<!-- p名称空间注入 -->
<bean id="person" class="com.bjxb.propertyTest.Person" p:pname="花咖"></bean>

  6、注入复杂类型属性

    (1)数组

    (2)list 集合

    (3)map 集合

    (4)properties 类型

    实体类:

public class Person {
private String[] arrs;
private List<String> list;
private Map<String, String> map;
private Properties properties; public void setArrs(String[] arrs) {
this.arrs = arrs;
} public void setList(List<String> list) {
this.list = list;
} public void setMap(Map<String, String> map) {
this.map = map;
} public void setProperties(Properties properties) {
this.properties = properties;
} }

    

    配置类中代码(默认是applicationContext.xml):

<!-- 注入复杂类型的属性值 -->
<bean id="person" class="com.bjxb.propertyTest.Person">
<!-- 数组 -->
<property name="arrs">
<array>
<value>小红</value>
<value>小黄</value>
<value>小蓝</value>
</array>
</property> <!-- list -->
<property name="list">
<list>
<value>小白</value>
<value>小黑</value>
<value>小太</value>
</list>
</property> <!-- map -->
<property name="map">
<map>
<entry key="aa" value="Lucy"></entry>
<entry key="bb" value="Jerry"></entry>
<entry key="cc" value="Tom"></entry>
</map>
</property> <!-- properties -->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>

    

IOC——Spring的bean的管理(xml配置文件)的更多相关文章

  1. IOC——Spring的bean的管理(注解方式)

    注解(简单解释) 1.代码里面特殊标记,使用注解可以完成一定的功能 2.注解写法 @注解名称(属性名称=属性值) 3.注解使用在类上面,方法上面和属性上面 注意:注解方式不能完全替代配置文件方式 Sp ...

  2. spring对bean的管理细节

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  3. Spring中bean的管理

    Spring 中常见的容器 我们知道spring容器就是spring中bean的驻留场所.spring容器并不是只有一个.spring自带了多个容器实现,可以归为两种不同的类型:bean工厂和应用上下 ...

  4. Spring之Bean的管理方式(Content,Beans)

    Spring的bean管理(注释) 注解 代码里特殊的标记,使用注解也可以直接完成相关功能 注解写法:@注解名称(属性名=属性值) 使用在类,方法,属性上面 Spring注解开发准备 导入jar包 ( ...

  5. 03 Spring对Bean的管理

    Spring创建bean的三种方式 1.第一种方式:使用默认构造函数创建 bean.xml <?xml version="1.0" encoding="UTF-8& ...

  6. 【Spring】28、Spring中基于Java的配置@Configuration和@Bean用法.代替xml配置文件

    Spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...

  7. 【Spring】JDBC事务管理XML配置

    将spring事务管理与spirng-mybatis分离开了: <?xml version="1.0" encoding="UTF-8"?> < ...

  8. Spring中Bean的管理问题

    首先,配置文件中定义的bean并不是都在启动时实例化. <bean id="accountService" class="com.foo.DefaultAccoun ...

  9. Spring怎么引入多个xml配置文件

    方式一:在web.xml中通过<context-param> 标签引入 <context-param> <param-name>contextConfigLocat ...

随机推荐

  1. 【windows 访问控制】开篇、访问控制模型模型

    访问控制模型的各个部分 访问控制模型有两个基本部分: 访问令牌,其中包含有关已登录用户的信息 安全描述符,其中包含用于保护安全对象 的安全信息 用户登录时 ,系统会对用户 的帐户名和密码进行身份验证. ...

  2. kubebuilder operator的运行逻辑

    kubebuilder 的运行逻辑 概述 下面是kubebuilder 的架构图.可以看到最外层是通过名为Manager的组件驱动的,Manager中包含了多个组件,其中Cache中保存了gvk和in ...

  3. MapReduce中一次reduce方法的调用中key的值不断变化

    简单一句话总结就是:ReduceContextImpl类的RawKeyValueIterator input迭代器对象里面存储中着key-value对的元素, 以及一个只存储value的迭代器,然后每 ...

  4. 01--c实现基础客户端和服务端与c++ boost.asio实现对比

    c实现服务端和客户端交互: 学习查阅的博客: https://blog.csdn.net/u011068702/article/details/54380259 https://blog.csdn.n ...

  5. JZ-062-二叉查找树的第 K 个结点

    二叉查找树的第 K 个结点 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点. 题目链接: 二叉查找树的第 K 个结点 代码 /** * 标题:二叉查找树的第 K 个结点 * 题目描述 * 给定 ...

  6. 零基础,三个月内,找到??? java后端开发工作

    一.分析你的问题 出于尊重,先分析一下你的原问题吧,从您的问题,我提取到关键信息:"零基础"."三个月内"."找到工作",最后一个关键词&q ...

  7. 如何使用 PuTTY 远程连接矩池云主机

    PuTTY 是一款开源的连接软件,用来远程连接服务器,支持 SSH.Telnet.Serial 等协议. 矩池云的主机支持 SSH 登录,以下为使用 PuTTY 连接矩池云 GPU 的使用教程. 如您 ...

  8. 数字逻辑实践6-> 从数字逻辑到计算机组成 | 逻辑元件总结与注意事项

    00 一些前言 数字逻辑是计算机组成与体系结构的前导课,但是在两者的衔接之间并没有那么流畅,比如对面向硬件电路的设计思路缺乏.这篇总结是在数字逻辑和计组体系结构的衔接阶段进行的. 虽然这篇文是两门课的 ...

  9. linux作业--第六周

    1.编写脚本实现登陆远程主机.(使用expect和shell脚本两种形式). #expect方式 yum -y install expect vim remote_ssh.sh #!/usr/bin/ ...

  10. linux Wireshark图解TCP三次握手与四次挥手

    Linux Wireshark图解TCP三次握手与四次挥手 原文章链接:Wireshark图解TCP三次握手与四次挥手 文章内容丰富 值得学习