一.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和两种实例化方式的更多相关文章

  1. Gson的两种实例化方式:

    2018-11-13   09:21:44 Gson的两种实例化方式: 1: 使用new Gson(); 普通实例化方式,不能配置定制化选项 Gson gson = new Gson(); 2: 通过 ...

  2. String 的两种实例化方式

    String 的两种实例化方式 隐式实例化:直接赋值 public class Demo { public static void main(String[] args) { String s = & ...

  3. C++的两种实例化方式

    C++中,类有两种实例化方式.一种是有new关键字,一种没有new关键字.那么,这两种实例化方式有什么区别呢? A a;//(1) a存在于栈上 A* a = new A();//(2) a存在于堆中 ...

  4. String类对象两种实例化方式比较

    第一种:直接赋值 String str =  "hello!" ; 在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,) 自JD ...

  5. Spring系列之Redis的两种集成方式

    在工作中,我们用到分布式缓存的时候,第一选择就是Redis,今天介绍一下SpringBoot如何集成Redis的,分别使用Jedis和Spring-data-redis两种方式. 一.使用Jedis方 ...

  6. String 两种实例化方式的区别

    package com.java1234.chap03.sec08; public class Demo3 { public static void main(String[] args) { //1 ...

  7. Spring bean的bean的三种实例化方式

     Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...

  8. String中的两种实例化方式的区别

    直接赋值:(String str = "字符串");只会开辟一块堆内存空间,并且会自动保存在对象池中以供下次重复使用. 构造方法:(String str = new  String ...

  9. Spring声明式事务的两种配置方式(注解/xml)

    application配置tx:annotation-driven 配置声明式事务tx:TransactionManager 声明式事务需要数据源所以需要配置DataSource 使用:在类或者方法上 ...

随机推荐

  1. oracle 数据库手动备份和恢复

    一.备份命令: 1.cmd  : exp 2.cmd  :用户名/密码@ip地址/数据库名  如:     yyj/yyj@172.12.5.5/orcl    要导出的数据库 3.回车:输入要输出的 ...

  2. Oracle查询当前用户和当前用户下的所有表

    转载自:http://blog.itpub.net/29485627/viewspace-1246317/ Oracle查询当前用户和当前用户下的所有表 (1)查询当前用户 SQL> show ...

  3. 优酷1080p的kux格式文件转码

    @echo off for /r . %%i in (*.kux) do ( "C:\Program Files (x86)\YouKu\YoukuClient\nplayer\ffmpeg ...

  4. 命令行(一):Git

    1,使用gitbash进行操作 2,初始化一个Git仓库,使用git init命令. 3,添加文件到Git仓库,分两步:使用命令git add <filename>可反复多次使用,添加多个 ...

  5. NOIP2016普及组解题报告

    概述 \(NOIP2016\)普及组的前三题都比较简单,第四题也有很多的暴力分,相信参加了的各位\(OIer\)在\(2016\)年都取得了很好的成绩. 那么,我将会分析\(NOIP2016\)普及组 ...

  6. 【14】 DFS 机器人活动范围 (static插曲)

    题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外),也不能进入行坐 ...

  7. 【C 语言】一元二次方程

    求一元二次方程:ax2+bx+c=0 的根. 输入三个实数a,b,c的值,且a不等于0. 数学基础:一元二次方程 只含有一个未知数(一元),并且未知数项的最高次数是2(二次)的整式方程叫做一元二次方程 ...

  8. MyBatis(5)——解决属性名与列名不一致的问题

    解决属性名与列名不一致的问题 问题描述: 当实体类的属性与数据库的列名不对应时取不到该列数据 说明:MyBatis会根据查询的列名设值(列名的setter方法),然后以此列名为做查询等操作,在此过程中 ...

  9. Redis07——Redis五大数据类型 set

    set Redis中set可以自动排重(不会出现重复数据),提供了判断某个成员是否在一个set集合内的重要接口(list没有此功能) 无序集合,底层是一个value为null的hash表,添加.删除. ...

  10. IntelliJ IDEA 2017.3尚硅谷-----设置项目文件编码

    这也可以 R暂时显示 C转换