Spring笔记02(3种加载配置文件的方式)
1.不使用Spring的实例:
01.Animal接口对应的代码:
package cn.pb.dao; /**
* 动物接口
*/
public interface Animal {
//吃饭
String eat();
//睡觉
void sleep();
}
02.Animal接口的实现类Dog对应的代码:
package cn.pb.dao.impl;
/**
* animal的实现类
*/ import cn.pb.dao.Animal; public class Dog implements Animal{
/**
* 无参构造 验证什么时候实例被创建
*/
public Dog(){
System.out.println("dog被实例化了!");
} public String eat() {
System.out.println("吃饭的方法");
return null;
} public void sleep() {
System.out.println("睡觉的方法");
} }
03.测试的代码:
@Test
public void test01(){
//之前的一种方式 耦合的!
Animal animal=new Dog();
animal.eat();
animal.sleep();
}
2.使用spring解耦的方式 创建applicationContext.xml文件 放在src的根目录下
01.Animal接口对应的代码:
package cn.pb.dao; /**
* 动物接口
*/
public interface Animal {
//吃饭
String eat();
//睡觉
void sleep();
}
02.Animal接口的实现类Dog对应的代码:
package cn.pb.dao.impl;
/**
* animal的实现类
*/ import cn.pb.dao.Animal; public class Dog implements Animal{
/**
* 无参构造 验证什么时候实例被创建
*/
public Dog(){
System.out.println("dog被实例化了!");
} public String eat() {
System.out.println("吃饭的方法");
return null;
} public void sleep() {
System.out.println("睡觉的方法");
} }
03.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--接收程序给我们的bean对象
id就是我们的一个标识
class是对应的实现类,class不能是接口
lazy-init="true" 默认是false 按需加载,就是在getBean的时候才会创建实例
-->
<bean id="dog" class="cn.pb.dao.impl.Dog" ></bean> </beans>
04.测试的代码:
001.applicationContext.xml放在项目的根路径下面
@Test
public void test02(){
/*
* 使用spring 对象交给容器来创建 解耦
* 01.引入jar
* 02.创建容器applicationContext.xml
* 03.加载spring的配置文件 创建容器 会把容器中所有的bean实例化
* 04.然后从容器中取Bean
*/
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("**************");
//因为我们在容器中定义了ID 根据id找到对应的类
Animal dog=(Dog)context.getBean("dog");
dog.eat();
dog.sleep();
}
002.applicationContext.xml放在项目的根路径下面
@Test
public void test03(){
/**
* 默认applicationContext.xml放在项目的根路径下面
* 也可以放在电脑指定的盘符下d:/applicationContext.xml
* 使用new FileSystemXmlApplicationContext来创建对象
*/ ApplicationContext context=new FileSystemXmlApplicationContext("d:/applicationContext.xml");
System.out.println("*************************");
//因为我们在容器中定义了ID 根据id找到对应的类
Animal dog=(Animal) context.getBean("dog");
dog.eat();
dog.sleep();
}
003.使用BeanFactory来创建容器的时候,不会实例化容器中所有的Bean,
在getBean()才创建对应Bean的对象,按需加载。
@Test
public void test04(){
/*
* 使用BeanFactory来创建容器的时候,不会实例化容器中的Bean
* 在getBean()才创建对应Bean的对象
*/
BeanFactory context=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
System.out.println("*************************");
//因为我们在容器中定义了ID 根据id找到对应的类
Animal dog=(Animal) context.getBean("dog");
dog.eat();
dog.sleep();
}
05.在spring的核心配置文件中 所有的bean默认都是单例模式:
001.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--接收程序给我们的bean对象
id就是我们的一个标识
class是对应的实现类,class不能是接口
--> <!--配置我们的student对象 lazy-init="true" 默认是false 按需加载-->
<bean id="student" class="cn.pb.bean.Student" lazy-init="true">
<property name="name" value="小黑"></property>
<property name="age" value="18"></property>
</bean> <!-- 在spring的核心配置文件中 所有的bean默认都是单例模式
scope="singleton" 默认
scope="prototype" 原型
-->
<bean id="student2" class="cn.pb.bean.Student" scope="singleton">
<property name="age" value="40"/>
<property name="name" value="小黑2"/>
</bean> </beans>
002.验证代码:
/**
* 验证单例模式
* 01.默认是单例 调用同一个对象 输出true
* 02.之后再xml文件中的student2 增加属性scope="prototype"
* 03.再次验证 两个对象肯定不一致 输出false
*/
@Test
public void studentTest5(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("*******************************************");
Student student = (Student) context.getBean("student2");
System.out.println(student);
Student student2 = (Student) context.getBean("student2"); //再次获取
System.out.println(student==student2); }
Spring笔记02(3种加载配置文件的方式)的更多相关文章
- SpringMvc的创建流程以及2种加载配置文件的方式
1.首先创建个web项目,第一步导入相应的jar包,并且buildtoPath 2.用elipse或myeclipse点击进入web.xml中 按住 Alt+ / 有个提示 找到前面带 #Dispat ...
- Spring 加载配置文件的方式
我们常用的加载context文件的方法有如下三个: 1.FileSystemXmlApplicationContext 这个方法是从文件绝对路径加载配置文件,例如: ApplicationContex ...
- Spring 创建 IOC 容器时加载配置文件的几种方式
一.ClassPathXmlApplicationContext 类路径加载 1. 使用 classpath 路径,classpath 前缀加不加都可以. ApplicationContext act ...
- Spring中加载配置文件的方式
原文:http://blog.csdn.net/snowjlz/article/details/8158560 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应 ...
- Java 加载配置文件的方式
一 使用原生方式读取配置文件 1 文件系统加载 Java代码 InputStream in = new FileInputStream("config.properties") ...
- UE4:四种加载资源的方式
转自:https://blog.csdn.net/zhangxsv123/article/details/79707686 第一种: 如果该蓝图有C++类(或者说是从C++类创建的蓝图),直接进行加载 ...
- angularJS1笔记-(19)-angular异步加载包的方式
我们平时写的导入包的方式都是同步方式,有时候会显得过于卡顿,这样我们就可以使用异步加载的方式. script.js方式: 执行结果为: 异步加载还可以加载多个即为script([,,,],functi ...
- 两种加载dll的方式
通过链接lib文件加载dll的话,使用过程中没法动态切换 通过loadlibrary函数动态加载的话,可以动态切换
- React Native两种加载图片的方式
1 加载网络图片 通过uri就可以加载网络图片 <Image source={{uri:'http://facebook.github.io/react/img/logo_og.png'}} s ...
随机推荐
- Android自动滚动 轮播循环的ViewPager
主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用.顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题 ...
- a标签javascript传参不正确的解决办法!
代码部分: <a href="javascript:void(0);" onClick="findList(${goodsClassify.id})"&g ...
- ABAP 弹出框 函数
POPUP_GET_VALUES_USER_HELP 是一个和用户交互信息的函数,用户能够填写信息,并且我们还能够依据实际的需求对弹出框进行F1 F4 以及用户的需求进行增强.具体的实现能够參考系统标 ...
- js异步请求发展史和yield
万恶的回调 对前端工程师来说,异步回调是再熟悉不过了,浏览器中的各种交互逻辑都是通过事件回调实现的,前端逻辑越来越复杂,导致回调函数越来越多,同时 nodejs 的流行也让 javascript 在后 ...
- npm ERR! fatal: unable to connect to github.com
https://blog.csdn.net/baidu_30809315/article/details/86520093 git config --global url."https:// ...
- 计算机网络--DNS
1.域名系统DNS(domain name system)是因特网使用的命名系统,用来把便于人们时用的机器名字转换为IP地址.因特网的域名系统DNS被设计成一个联机分布式数据库系统,并采用客户服务器方 ...
- SQL时间戳的使用(转)
一直对时间戳这个概念比较模糊,相信有很多朋友也都会误认为:时间戳是一个时间字段,每次增加数据时,填入当前的时间值.其实这误导了很多朋友. 1.基本概念 时间戳:数据库中自动生成的唯一二进制数字,与时间 ...
- 关于System.Data.ParameterDirection四个枚举类型所起的作用(转)
相信大家都知道.net中有四个关于参数传入传出的类型 分别是: System.Data.ParameterDirection.Input System.Data.ParameterDirection. ...
- 九度OJ 1026:又一版 A+B (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11412 解决:3086 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < ...
- Linux内核的编译安装
前言 Linux内核是Linux操作2347系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性.内核主要功能包括进程管理.内存管理.文件管理.设备管理.网络管理等.Linux内 ...