Spring_IOC
我们都知道,如果要在不同的类中使用同一个对象一般我们我们都需要在每一个类中都去new一个新的对象,也有的人会为这个对象写一个工具类,无论哪种方法都需要我们自己去创建,不但繁琐,而且相当耗损资源,所以才有了Spring使用的必要性,也就是说,Spring的众多功能中为我们创建对象就是其中之一。话不多说直接上代码:
/*
*dao层接口
*/
public interface AccountDao {
void say();
}
/*
* dao层实现类
*/
public class AccountDaoImpl implements AccountDao {
@Override
public void say() {
System.out.println("我是dao层>>>>>>>>>>>>>");
}
}
/**
* service层接口
*/
public interface AccountService {
void say();
}
/**
* service实现类
*/
public class AccountServiceImpl implements AccountService { private AccountDao dao;//创建dao层成员,并写出它的set,get方法 @Override
public void say() {
dao.say();//直接调用dao层的方法
System.out.println("我是service层>>>>>>>>>>>>>");
} //get方法
public AccountDao getDao() {
return dao;
}
//set方法
public void setDao(AccountDao dao) {
this.dao = dao;
}
}
第一种纯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">
<!--创建dao层的bean,其中class属性指向的dao接口的实现类,只能时实现类,不能是接口-->
<bean id="dao" class="com.lhf.dao.impl.AccountDaoImpl"/>
<!--创建service层的bean-->
<bean id="service" class="com.lhf.service.impl.AccountServiceImpl">
<!--向service层注入dao的bean,可以把它之间看成是在service层创建一个dao的对象,
其中的name属性是service层的成员变量,如果成员是基本类型,可以用value属性直接为之赋值-->
<property name="dao" ref="dao"/>
</bean>
</beans>
创建测试类
public class App
{
public static void main( String[] args )
{
//spring读取xml配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从spring容器中获取service层的对象
AccountService bean = context.getBean(AccountService.class);
//调用service层的方法
bean.say();
}
}
第一种注解方式,需要一个xml配置。接口都不变,只是在实现类上有些变化
/*
* dao层实现类
*/
@Repository("dao")//相当于xml中配置的dao层的bean节点
public class AccountDaoImpl implements AccountDao {
@Override
public void say() {
System.out.println("我是dao层>>>>>>>>>>>>>");
}
}
/**
* service实现类
*/
@Service("service")//相当于xml层中配置的service的bean节点
public class AccountServiceImpl implements AccountService {
@Autowired//默认按类型匹配
@Qualifier("dao")//与autowired连用可以按名字匹配
private AccountDao dao;//创建dao层成员,并写出它的set,get方法 @Override
public void say() {
dao.say();
System.out.println("我是service层>>>>>>>>>>>>>");
} //get方法
public AccountDao getDao() {
return dao;
}
//set方法
public void setDao(AccountDao dao) {
this.dao = dao;
}
}
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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描包-->
<context:component-scan base-package="com.lhf"/>
<!--开启ioc注解-->
<context:annotation-config/>
</beans>
测试类不变,自行测试
接下来最后一种就是不需要xml但是需要一个核心配置类AppConfig,取代xml
@Configuration//标识,代表本类为核心配置类
@ComponentScan("com.lhf")//需要扫描的包的位置
public class AppConfig {
//暂时什么都不用写,后续又其他操作
}
接口和实现类与上一种相同但是测试类略有变化
public class App
{
public static void main( String[] args )
{
//spring读取核心配置类
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
//从spring容器中获取service层的对象
AccountService bean = context.getBean(AccountService.class);
//调用service层的方法
bean.say();
}
}
以上就是spring中对属性ioc对对象注入的几种方式。这里写的不全,有需要的可以查以下官方文档。
Spring_IOC的更多相关文章
- Spring_IOC&DI概述
- 分享知识-快乐自己:Spring_IOC(控制反转)详解
IoC是什么: 1):Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. 2):在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的 ...
- Spring_IoC注解开发和AOP的XML开发(学习笔记2)
一:IoC注解开发 1,在applicationContext.xml中需要引入context约束 <beans xmlns="http://www.springframework.o ...
- coding++:Spring_IOC(控制反转)详解
IoC是什么: 1):Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. 2):在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的 ...
- 【转】Spring_IOC学习
原文地址:http://github.thinkingbar.com/spring/ 一.XML文件语法的知识点 对于XML没有提示的话,在Eclipse中搜索XML catalog设置.对于XML文 ...
- Spring依赖注入 --- 简单使用说明
Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...
- Maven使用教程
一.Maven介绍 我们在开发项目的过程中,会使用一些开源框架.第三方的工具等等,这些都是以jar包的方式被项目所引用,并且有些jar包还会依赖其他的jar包,我们同样需要添加到项目中,所有这些相关的 ...
- Java Web系列:Spring依赖注入基础
一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...
- 开放源代码的设计层面框架Spring——day02
spring第二天 一.基于注解的IOC配置 1.1写在最前 学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能是 ...
随机推荐
- UOJ #2 【NOI2014】起床困难综合症
这道题我们设两个bitset(N和Y) \(N_i = cal(i,0) , Y_i=cal(i,1)\) cal(i) 即第i位经过题目中的计算后所得出来的值 然后贪心.倒序循环i,考虑第i位如何决 ...
- 扫描转换算法——DDA、中点画线画圆、椭圆
我的理解:在光栅图形学中,由于每一个点的表示都只能是整数值,所以光栅图形学实际只是对对实际图形的近似表示. 数值微分法(DDA):以下PPT截图来自北京化工大学李辉老师 代码实现: import ma ...
- 31. docker swarm 通过 service 部署 wordpress
1. 创建 一个 overlay 的网络 driver docker network create -d overlay demo 查看网络列表 docker network ls 2. 创建mysq ...
- 史上最难PHPer笔试题,40分就能月薪过万!附答案
请批判性的学习,欢迎大牛指正错误 1.有关PHP字符串的说法,不对的是:A.如果一个脚本的编码是 ISO-8859-1,则其中的字符串也会被编码为 ISO-8859-1.B.PHP的字符串在内部是字节 ...
- JNI的第1种写法 及 JNI通过形参修改Java数据
声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 目的:通过形参在Java 和C之间传递数据,尤其是大块的媒体数据 优点:避免通过返回值返回一个巨大的数据块 ...
- java基础一(2020.1.3)
今日学习内容: 带命令行参数的Java实例 Java的程序结构 Java的变量与常量 带命令行参数的Java实例: class ArgsDemo{ public static void main(St ...
- 关于redis的使用总结
简介 redis是一个开源的用c语言编写的数据库,但并不像常规的关系型数据库那样把数据存储在表中 , 而是像Java中的Map集合一样,存储的是一系列key=value键值对,redis属于NoSQL ...
- 常用的模型集成方法介绍:bagging、boosting 、stacking
本文介绍了集成学习的各种概念,并给出了一些必要的关键信息,以便读者能很好地理解和使用相关方法,并且能够在有需要的时候设计出合适的解决方案. 本文将讨论一些众所周知的概念,如自助法.自助聚合(baggi ...
- 13.docker 网络 docker NameSpace (networkNamespace)
一. 案例 1.创建一个 container docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600 ...
- spring前两天
1,Spring是什么 (1) Spring是JavaEE 一站式,轻量级 容器框架 ① JavaEE :企业级 ② 一站式: JavaWeb开发的三层 直接使用Spring一个框架全部完成 ③ 轻量 ...