【Spring实战】—— 2 构造注入
时间:2022-04-22
本文章向大家介绍【Spring实战】—— 2 构造注入,主要内容包括注入属性、注入对象、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
本文讲解了构造注入以及spring的基本使用方式,通过一个杂技演员的例子,讲述了依赖注入属性或者对象的使用方法。
如果想要使用spring来实现依赖注入,需要几个重要的步骤:
1 定义主要的类和需要分离的属性。这里主要的类,是指程序的主要对象,在例子中是Juggler杂技员。而想要分离构造的属性,是它手中的袋子的数目beanBags。
2 配置bean.xml。通过配置文件,确定主要的类和属性之间的关系,以及实现类。
3 通过应用上下文,获取bean,并进行使用。
注入属性
实例代码:
1 表演者接口:Performer.java
package com.spring.test.action1;
public interface Performer {
void perform() throws PerformanceException;
}
2 杂技员:Juggler,继承了表演者接口
package com.spring.test.action1;
public class Juggler implements Performer{
private int beanBags = 3;
public Juggler(){
}
public Juggler(int beanBags){
this.beanBags = beanBags;
}
public void perform() throws PerformanceException {
System.out.println("Juggler "+beanBags+" beanBags");
}
}
3 Spring配置文件:bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="duke" class="com.spring.test.action1.Juggler">
<constructor-arg value="15"/>
</bean>
</beans>
4 应用上下文获取指定的bean
package com.spring.test.action1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Performer performer = (Performer)ctx.getBean("duke");
try {
performer.perform();
} catch (PerformanceException e) {
e.printStackTrace();
}
}
}
执行结果如下:
Juggler 15 beanBags
注入对象
1 例如,上面的杂技演员不仅仅会仍袋子,还会表演诗歌,那么诗歌这个对象就需要注入到表演者的构造函数中,可以如下表示会朗诵诗歌的杂技演员:PoeticJuggler
package com.spring.test.action1;
public class PoeticJuggler extends Juggler{
private Poem poem;
public PoeticJuggler(Poem poem){
super();
this.poem = poem;
}
public PoeticJuggler(int beanBags,Poem poem){
super(beanBags);
this.poem = poem;
}
public void perform() throws PerformanceException {
super.perform();
System.out.println("While reciting...");
poem.recite();
}
}
2 诗歌对象:Sonnet29
package com.spring.test.action1;
public class Sonnet29 implements Poem{
private static String lines = "嘛咪嘛咪哄";
public Sonnet29() {
}
public void recite() {
System.out.println(lines);
}
}
3 Bean.xml配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="duke" class="com.spring.test.action1.Juggler">
<constructor-arg value="15"/>
</bean>
<bean id="sonnet29" class="com.spring.test.action1.Sonnet29"/>
<bean id="poeticDuke" class="com.spring.test.action1.PoeticJuggler">
<constructor-arg value="15"/>
<constructor-arg ref="sonnet29"/>
</bean>
</beans>
4 主要的执行代码,通过应用上下文获取制定的bean
package com.spring.test.action1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
// Performer performer = (Performer)ctx.getBean("duke");
Performer performer1 = (Performer)ctx.getBean("poeticDuke");
try {
// performer.perform();
performer1.perform();
} catch (PerformanceException e) {
e.printStackTrace();
}
}
}
5 执行结果如下
一月 24, 2015 4:40:46 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@35bf8de1: startup date [Sat Jan 24 16:40:46 CST 2015]; root of context hierarchy
一月 24, 2015 4:40:46 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [bean.xml]
一月 24, 2015 4:40:46 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3401a0ad: defining beans [duke,sonnet29,poeticDuke]; root of factory hierarchy
Juggler 15 beanBags
While reciting...
嘛咪嘛咪哄
- 【Go 语言 redis内存数据库存储 demo】
- linux下基本操作记录mongodb
- ClassLoader究竟为何物?
- Oracle应用实战八(完结)——存储过程、函数+对象曹组
- 动态代理模式原理
- SQL可以正常用,但cmd启动不了mysql,报错[ERROR] unknown variable ;basedir=....问题
- Percona-toolkit的安装和配置(r8笔记第86天)
- 分布式服务框架 Zookeeper
- python--类方法、对象方法、静态方法
- Go语言内存分配器的实现
- Go 语言 数据库操作之链接数据库实现
- 对于tnsping的连接超时的功能补充(r9笔记第3天)
- struts2拦截器源码分析
- Go语言学习(一):hello world
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 容器技术|Docker三剑客之Compose
- ProxySQL+Mysql实现数据库读写分离实战
- 打造高逼格、可视化的Docker容器监控系统平台
- 企业面试题|最常问的MySQL面试题集合(一)
- 深入理解消息中间件技术之RabbitMQ服务
- 手把手从0开始教你搭建Jumpserver,为服务器安全保驾护航!
- 企业面试题|最常问的MySQL面试题集合(二)
- 值得一看的35个Redis面试题总结
- 容器技术|Docker三剑客之docker-machine
- 企业面试题|最常问的MySQL面试题集合(三)
- 「微服务架构」API版本控制最佳实践介绍
- 2020年最新字节、阿里、腾讯、爱奇艺等BAT Android社招高频面试题,押题99.98%!
- 使用镜像部署 Hexo 静态页面
- 基于zmq RPC简单C++实现
- App为什么会crash?一篇文章带你探究根本原因 ,事情没有你想得那么简单!