1.开始Spring
1 对Spring的认识
为了实现控制反转,我们可以想象java创建了一个工厂类,工厂类可以去读取配置文件 比如一个.property文件。通过这个文件中的配置,反射创建一些对象,当外界需要某个类的对象的时候,就像这个工厂索取。
但是存在一个问题,那就是每次索取都会创建一个新的对象,而不是单例的。于是java就弄了一个Map字典,维护这一个字典,只要用户需要的对象不存在,就把对象创建好装进这个字典。如果用户需要的对象在
这个字典中存在,就直接从这个字典中取,这就实现了单例,我们将这个字典视为一个存放类对象的容器。它以后发展为我们所谓的ioc容器——ApplicationContext。
2.一个最简单的Spring 控制反转案例如下:
a.创建一个接口和接口的实现如下:
package com.itheima.service;
public interface IAccountService {
void saveAccount();
}
package com.itheima.service.impl;
import com.itheima.service.IAccountService;
public class AccountServicePureImpl implements IAccountService {
public void saveAccount() {
System.out.println("朝辞白帝彩云间");
}
}
b.在Resource下创建一个bean.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-3.0.xsd"> <bean id="accountServicePureImpl" class="com.itheima.service.impl.AccountServicePureImpl"></bean> </beans>
c.如果要调用这个接口的实现类 首先要创建容器
package com.itheima.ui; import com.itheima.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client {
public static void main(String[] args) {
//告诉容器去读bean.xml中的配置 ClassPathXmlApplicationContext 是容器的三个主要常用的实现类之一
ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
IAccountService ac=(IAccountService)context.getBean("accountServicePureImpl");
ac.saveAccount();
}
}
3.IOC有三种IOC方式 第一 set方法 注意必须要有set方法 不能只定义一个变量 第二 构造函数 第三注解注入
package com.itheima.service.impl; import com.itheima.dao.IAccountDao;
import com.itheima.service.IAccountService; public class AccountServiceImpl implements IAccountService {
private IAccountDao accountDao=null;
public void setAccountDao(IAccountDao accountDao) {
this.accountDao = accountDao;
} public void saveAccount() {
accountDao.saveAccount();
}
}
---------------以上是实现类--------------------
下面是配置
<?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-3.0.xsd">
<bean id="accountServiceImpl" class="com.itheima.service.impl.AccountServiceImpl">
<property ref="accountDaoImpl" name="accountDao"></property>
</bean>
<bean id="accountDaoImpl" class="com.itheima.dao.impl.AccountDaoImpl"></bean> </beans>
三生三世
1.开始Spring的更多相关文章
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
- Spring之旅
Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...
随机推荐
- PAT甲级——A1135 Is It A Red-Black Tree 【30】
There is a kind of balanced binary search tree named red-black tree in the data structure. It has th ...
- Android按钮绑定四种方式
public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCr ...
- Keywords Search HDU2222 AC自动机模板题
ac自动机说起来很复杂,其实和kmp是一样的思路,都是寻找相同前后缀,减少跳的次数.只要理解了kmp是怎么求next数组的,ac自动机bfs甚至比knp还好写. 这里大致说一下kmp求next数组的方 ...
- Luogu P1131 [ZJOI2007]时态同步(dfs)
P1131 [ZJOI2007]时态同步 题意 题目描述 小\(Q\)在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字\(1,2,3,\dots\).进行 ...
- postgresql数据库安装后的pgadmin4切换中文
如图所示
- 前端CSS样式操作
目录 字体和文字 设置标签的宽高 字体属性 文字的属性 文字对齐 text-align 文字装饰 text-decoration 首行缩进 text-indent 背景属性 背景图片 边框 画圆 di ...
- 2-sat——hdu3062基础
hdu就是会卡cin,, 另一种建模方式,把点i拆成i*2,i*2+1,有时候这样会比较简单 #include<bits/stdc++.h> using namespace std; #d ...
- duilib教程之duilib入门简明教程4.响应按钮事件
上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI; 也就是说,其实那整块绿色背景区域都是按钮的区域.(这里简要介绍下,CC ...
- 莫烦pytorch学习笔记(一)——torch or numpy
Q1:什么是神经网络? Q2:torch vs numpy Numpy:NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(neste ...
- apache配置域名子目录,访问不同子项目
<VirtualHost *:443> DocumentRoot "E:/phpstudy/WWW/nextplus" ServerName local-main.co ...