一、实例化方式

3种bean实例化方式:默认构造、静态工厂、实例工厂

1.默认构造

<bean id="" class="">  必须提供默认构造

2. 静态工厂

l 常用与spring整合其他框架(工具)

l 静态工厂:用于生成实例对象,所有的方法必须是static

<bean id=""  class="工厂全限定类名"  factory-method="静态方法">
UserService.java
package com.jd.inject.static_factory;

public interface UserService {

    public void addUser();

}
UserServiceImpl.java
package com.jd.inject.static_factory.impl;

import com.jd.inject.static_factory.UserService;

public class UserServiceImpl implements UserService {

    @Override
public void addUser() {
System.out.println("b_static_factory add user");
} }
MyBeanFactory.java
package com.jd.inject.static_factory;

import com.jd.inject.static_factory.impl.UserServiceImpl;

/**
* @author weihu
* @date 2018/8/12/012 18:54
*/
public class MyBeanFactory { /**
* 创建实例
* @return
*/
public static UserService createService(){
return new UserServiceImpl();
}
}

beans.xml

<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--将静态工厂创建的实例交予spring
class 确定静态工厂全限定类名
factory-method 确定静态方法名,还是创建UserServiceImpl对象
-->
<bean id="userServiceId" class="com.jd.inject.static_factory.MyBeanFactory" factory-method="createService"></bean>
</beans>
测试类

TestStaticFactory.java
package com.jd.test;

import com.jd.inject.static_factory.MyBeanFactory;
import com.jd.inject.static_factory.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author weihu
* @date 2018/8/12/012 18:57
*/
public class TestStaticFactory { @Test
public void testStaticFactory(){
//自定义工厂
UserService userService = MyBeanFactory.createService();
userService.addUser(); } @Test
public void testSpringStaticFactory(){
//spring工厂
String xmlPath="com/jd/inject/static_factory/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
UserService userServiceId = applicationContext.getBean("userServiceId", UserService.class);
userServiceId.addUser();
}
}

3. 实例工厂

实例工厂:必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的。

UserService.java
package com.jd.inject.factory;

public interface UserService {

    public void addUser();

}
UserServiceImpl.java
package com.jd.inject.factory.impl;

import com.jd.inject.factory.UserService;

public class UserServiceImpl implements UserService {

    @Override
public void addUser() {
System.out.println("factory add user");
} }
MyBeanFactory.java
package com.jd.inject.factory;

import com.jd.inject.factory.impl.UserServiceImpl;

/**
* @author weihu
* @date 2018/8/12/012 18:54
*/
public class MyBeanFactory { /**
* 创建实例
* @return
*/
public UserService createService(){
return new UserServiceImpl();
}
}

beans.xml

<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--创建工厂实例-->
<bean id="myBeanFactoryId" class="com.jd.inject.factory.MyBeanFactory"></bean>
<!--获得userservice
factory-bean确定工厂实例
factory-method 确定普通方法
-->
<bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>
</beans>
测试类
TestFactory.java
package com.jd.test;

import com.jd.inject.factory.MyBeanFactory;
import com.jd.inject.factory.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author weihu
* @date 2018/8/12/012 19:16
*/
public class TestFactory { @Test
public void testFactory(){
MyBeanFactory myBeanFactory=new MyBeanFactory();
UserService userService = myBeanFactory.createService();
userService.addUser(); } @Test
public void testSpringFactory(){
String xmlPath="com/jd/inject/factory/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
UserService userServiceId = applicationContext.getBean("userServiceId", UserService.class);
userServiceId.addUser(); }
}

3.装配Bean 基于XML的更多相关文章

  1. Spring装配Bean之XML装配bean

    在Spring刚出现的时候,XML是描述配置的主要方式,在Spring的名义下,我们创建了无数行XML代码.在一定程度上,Spring成为了XML的同义词. 现在随着强大的自动化配置和Java代码的配 ...

  2. 第2章—装配Bean—通过XML装配Bean

    通过XML装配Bean ​ 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...

  3. Spring IOC容器装配Bean_基于XML配置方式

    开发所需jar包 实例化Bean的四种方式 1.无参数构造器 (最常用) <?xml version="1.0" encoding="UTF-8"?> ...

  4. IOC装配Bean(XML方式)

    Spring框架Bean实例化的方式 提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 无参数构造方法的实例化 <!-- 默认情况下使用的就是 ...

  5. IoC容器装配Bean(xml配置方式)(Bean的生命周期)

    1.Spring管理Bean,实例化Bean对象 三种方式 第一种:使用类构造器实例化(默认无参数) package cn.itcast.spring.initbean; /** * 使用构造方法 实 ...

  6. 6.装配Bean基于注解

    1.注解:就是一个类,使用@注解名称 开发中:使用注解 取代 xml配置文件. @Component取代<bean class=""> @Component(" ...

  7. Spring基础篇——通过Java注解和XML配置装配bean(转载)

      作者:陈本布衣 出处:http://www.cnblogs.com/chenbenbuyi 本文版权归作者和博客园共有,欢迎转载分享,但必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留 ...

  8. Spring实战2:装配bean—依赖注入的本质

    主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...

  9. SpringInAction读书笔记--第2章装配Bean

    实现一个业务需要多个组件相互协作,创建组件之间关联关系的传统方法通常会导致结构复杂的代码,这些代码很难被复用和单元测试.在Spring中,对象不需要自己寻找或创建与其所关联的其它对象,Spring容器 ...

随机推荐

  1. eShopOnContainers 看微服务 ②:配置 启动

    一.什么是docker Docker 是一个开源项目,通过把应用程序打包为可移植的.自给自足的容器(可以运行在云端或本地)的方式,实现应用程序的自动化部署. 使用 Docker 的时候,需要创建一个应 ...

  2. 正则表达式re.sub替换不完整的问题现象及其根本原因

    title: 正则表达式re.sub替换不完整的问题现象及其根本原因 toc: true comment: true date: 2018-08-27 21:48:22 tags: ["Py ...

  3. git 提交小备注

    总结: ·  git add -A  提交所有变化 ·  git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new) ·  git add .  提交 ...

  4. STS(eclipse)3.7.3新建项目报错:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)

    烦人的版本兼容问题 没有使用sts3.7.3系统内嵌的maven3.3.3,调整为稍高版本的maven3.5.2,懒得修改配置了. 升级eclipse插件吧. Eclipse,Help -> I ...

  5. SSH登录启用Google二次身份验证

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  6. quick pdf library控件

    quick pdf library库只能在windows环境下运行 1.下载quick pdf library 2.注册控件 进入cmd  regsvr32 "C:\Program File ...

  7. 491. Increasing Subsequences增长型序列

    [抄题]: Given an integer array, your task is to find all the different possible increasing subsequence ...

  8. 【转载】Windows上那些值得推荐的良心软件-整理 easybcd 引导工具 easyuefi 引导工具

    您查询的关键词是:清理dism知乎 以下是该网页在北京时间 2019年03月17日 21:56:16 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 htt ...

  9. java得到当前日期的前一天或后一天

    public String getNextDay(String startdate) throws ParseException{ Date date = (new SimpleDateFormat( ...

  10. eclipse使用lomnok无效

    把下载好的jar包去掉版本号放到与eclipse.exe同级目录 修改sts.ini或者eclipse.ini 在最后面加上: -javaagent:lombok.jar-Xbootclasspath ...