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的更多相关文章

  1. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  3. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  4. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  5. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  6. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  7. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  8. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  9. Spring之旅(2)

    Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...

  10. Spring之旅

    Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...

随机推荐

  1. jQuery WeUI

    jQuery WeUI jQuery WeUI 是专为微信公众账号开发而设计的一个简洁而强大的UI库,包含全部WeUI官方的CSS组件,并且额外提供了大量的拓展组件,丰富的组件库可以极大减少前端开发时 ...

  2. Nodejs之路(三)—— Nodejs之Express框架

    Express 原生的 http 在某些方面表现不足以应对我们的开发需求,所以我们需要使用框架来加快我们的开发效率.框架的目的就是提高效率,让我们的代码更高度统一 在Node 中,有很多 Web 开发 ...

  3. C#窗体代码相关笔记

    获取ComboBox下拉列表的所有选项值 ArrayList al = new ArrayList(); foreach (string item in this.comboBox2.Items) { ...

  4. UMP系统功能 资源管理

  5. art-template官方文档

    http://aui.github.io/art-template/zh-cn/docs/

  6. fiddler抓包工具遇到的问题-------502报错

    遇到的问题: 打开浏览器,输入本机的虚拟机地址的bugfree,出现无法连接的提示,具体是: [Fiddler] The connection to '192.168.211.128' failed. ...

  7. java.util.concurrent中的几种同步工具类

    java.util.concurrent并发包中提供了一系列的的同步工具类,这些基础类不管是否能在项目中使用到,了解一下使用方法和原理对java程序员来说都是有必要的.博主在看<java并发编程 ...

  8. tip:删除数组中的undefined

    this.checkedImg = this.checkedImg.filter(Boolean)

  9. 密码学笔记(2)——RSA密码

    上一篇笔记中讲述了大量的代数知识,这一篇中我们看看如何将这些代数知识应用到RSA密码体制中. 一.公钥密码学简介 在经典密码学的研究模型中,我们根据已选择的秘钥K得到一条加密规则$e_{k}$和一条解 ...

  10. JspServlet

    初始化servlet时,选用的配置类: config.getInitParameter("engineOptionsClass")?(System.getSecurityManag ...