Spring的核心api和两种实例化方式
一.spring的核心api
Spring有如下的核心api

BeanFactory :这是一个工厂,用于生成任意bean。采取延迟加载,第一次getBean时才会初始化Bean
ApplicationContext:是BeanFactory的子接口,功能更强大。(国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实现)。当配置文件被加载,就进行对象实例化。
ClassPathXmlApplicationContext 用于加载classpath(类路径、src)下的xml,加载xml运行时位置 --> /WEB-INF/classes/...xml
FileSystemXmlApplicationContext 用于加载指定盘符下的xml,加载xml运行时位置 --> /WEB-INF/...xml,通过java web ServletContext.getRealPath() 获得具体盘符
二.spring的两种实例化方式
1.使用ApplicationContext方式进行加载
2.使用BeanFactory方式进行加载
第一步 建立Spring工程,并向其中导入必须的jar包

第二步 建立BookDao接口,BookDaoImpl实现类,BookService接口,BookServiceImpl实现类
package com.zk.myspring;
public interface BookDao {
public void addBook();
}
package com.zk.myspring;
public class BookDaoImpl implements BookDao{
@Override
public void addBook() {
// TODO Auto-generated method stub
System.out.println("addBook");
}
}
package com.zk.myspring;
public interface BookService {
public abstract void addBook();
}
package com.zk.myspring;
public class BookServiceImpl implements BookService{
//方式一:接口等于实现类
//private BookDao bookDao=new BookDaoImpl();
//方式二:接口+set方法
private BookDao bookdao;
//BookService依赖注入 BookDao
public void setBookdao(BookDao bookdao) {//依赖注入
this.bookdao = bookdao;
}
@Override
public void addBook() {
// TODO Auto-generated method stub
//this.bookdao.addBook();
System.out.println("add book");
}
}
第三步 创建一个ApplicationContext.xml文件,并在文件中配置BookDao和BookService的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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!-- 创建Dao -->
<!-- 模拟spring执行过程
创建Service实例:BookService bookservice=new BookServiceImpl(); IOC <bean>
创建Dao实例:BookDao bookDao=new BookDaoImpl(); IOC
将dao设置给service:bookservice.setBookDao(bookDao); DI <property> <property> 用于属性注入
name:bean的属性名,通过setter方法获得
ref:另一个bean的id值的引用
-->
<!--创建Dao -->
<bean id="bookDaoId" class="com.zk.myspring.BookDaoImpl" ></bean>
<!-- 创建service 依赖注入bookdaoId-->
<bean id="bookServiceId" class="com.zk.myspring.BookServiceImpl">
<property name="bookdao" ref="bookDaoId"></property>
</bean>
</beans>
最后一步 使用两种方式实例化bean,我们可以使用ApplicationContext和BeanFactory分别实例化Bean
package com.zk.myspring; import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource; public class TestBook {
public static void main(String[]args)
{
//从spring容器中获得
String path="ApplicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(path);
BookService bs=(BookService) ac.getBean("bookServiceId");
bs.addBook();
}
@Test
public void test1(){
//使用BeanFactory实例化
String path="ApplicationContext.xml";
BeanFactory bf=new XmlBeanFactory(new ClassPathResource(path));
BookService bs=(BookService) bf.getBean("bookServiceId");
bs.addBook();
}
}
分别运行两个实例
ApplicationContext运行结果

BeanFactory运行结果

成功
三.自定义工厂
新建一个Spring_003 工程,并加入MyBeanFactory.java、TestBeanFactory.java、UserService.java、UserServiceImpl.java

MyBeanFactory表示自定义工厂
package com.zk.BeanFactory;
public class MyBeanFactory {
public static UserService createService(){
return new UserServiceImpl();
}
}
UserService.java
package com.zk.BeanFactory;
public interface UserService {
public void addUser();
}
UserServiceImpl.java
package com.zk.BeanFactory;
public class UserServiceImpl implements UserService{
@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("UserService");
}
}
配置ApplicationContext.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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userservice" class="com.zk.BeanFactory.UserServiceImpl"></bean>
<!-- <bean id="user" class="com.zk.BeanFactory.User"></bean>-->
</beans>
最后写一个TestBeanFactory.java文件
package com.zk.BeanFactory;
import org.junit.Test;
public class TestBeanFactory {
@Test
public void Demo(){
UserService userservice=MyBeanFactory.createService();
userservice.addUser();
}
}
执行结果

success
Spring的核心api和两种实例化方式的更多相关文章
- Gson的两种实例化方式:
2018-11-13 09:21:44 Gson的两种实例化方式: 1: 使用new Gson(); 普通实例化方式,不能配置定制化选项 Gson gson = new Gson(); 2: 通过 ...
- String 的两种实例化方式
String 的两种实例化方式 隐式实例化:直接赋值 public class Demo { public static void main(String[] args) { String s = & ...
- C++的两种实例化方式
C++中,类有两种实例化方式.一种是有new关键字,一种没有new关键字.那么,这两种实例化方式有什么区别呢? A a;//(1) a存在于栈上 A* a = new A();//(2) a存在于堆中 ...
- String类对象两种实例化方式比较
第一种:直接赋值 String str = "hello!" ; 在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,) 自JD ...
- Spring系列之Redis的两种集成方式
在工作中,我们用到分布式缓存的时候,第一选择就是Redis,今天介绍一下SpringBoot如何集成Redis的,分别使用Jedis和Spring-data-redis两种方式. 一.使用Jedis方 ...
- String 两种实例化方式的区别
package com.java1234.chap03.sec08; public class Demo3 { public static void main(String[] args) { //1 ...
- Spring bean的bean的三种实例化方式
Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...
- String中的两种实例化方式的区别
直接赋值:(String str = "字符串");只会开辟一块堆内存空间,并且会自动保存在对象池中以供下次重复使用. 构造方法:(String str = new String ...
- Spring声明式事务的两种配置方式(注解/xml)
application配置tx:annotation-driven 配置声明式事务tx:TransactionManager 声明式事务需要数据源所以需要配置DataSource 使用:在类或者方法上 ...
随机推荐
- Ubuntu, 更新Sourses.list
1.备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources_list.bak 2.加载文件 vim:vim sourses.list ubuntu d ...
- java基础(三)之面向对象编程
对象的创建方法 语法: class 类名{ 属性; 方法; } 生成对象的方法 类名 对象名 = new 类名(); Dog dog = new Dog(); 对象的使用方法1.对象.变量;2.对象. ...
- 2、Spring-RootApplicationContext-refresh
上一篇文中提到父容器root applicationContext最后是调用XmlWebApplicationContext去实现的, 但是什么时候开始解析标签(默认标签.自定义标签).注册bean以 ...
- Charles 查看https请求数据 Mac/ android
Charles_v4.0.1_Mac_破解版下载地址:https://pan.baidu.com/s/1c23VPuS 1.在Mac电脑上安装Charles的根证书 打开Charles->菜单H ...
- 同步选中所有checkbox
$("input[type=checkbox][tag=ckAll]").change(function () $(this).parent().parent().siblings ...
- 【算法学习记录-排序题】【PAT A1016】Phone Bills
A long-distance telephone company charges its customers by the following rules: Making a long-distan ...
- 为什么需要激活函数 为什么需要归一化 python内置函数:enumerate用法总结
为什么需要激活函数 为什么需要归一化 python内置函数:enumerate用法总结 待办 激活函数的用途(为什么需要激活函数)? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情 ...
- Java:面向对象的编程语言
java是面向对象的编程语言 Object,就是指面向对象的对象,对象就是实例. 在java里,对象是类的一个具体实例.就像:人,指一个类.你.我.他.张三.李四.王五等则是一个个具体的实例,也就是j ...
- Docker - ubuntu 镜像安装网络工具
概述 给 ubuntu 镜像, 安装一些基本的网络工具 背景 尝试学习的时候, 需要检测网络的连通性 没有这些工具, 绕了不少弯路 工具们 ping ip a 环境 docker 18.09 ubun ...
- selenium定位方法-iframe元素定位方法
在自动化测试中,如果无法定位到一个元素,那么最大的可能是定位的元素是在iframe框架中,iframe对象代表一个HTML的内联框架,在HTML中,iframe每出现一次,一个iframe对象就会被创 ...