一、Spring作用:管理项目中各种业务Bean(service类、Dao类、Action类),实例化类,属性赋值

二、Spring IOC(Inversion of Control )控制反转,也被称为依赖注入(Dependency Injection[DI]),是面向对象编程 中的一种设计理念,用来减轻程序代码之间的耦合度。

IOC原理:侧重原理

在业务代码中不使用我们之间司空见惯的关键字new来构建一个业务实例,而是在配置文件中。通过xml节点来告知容器如何对内存中构建的对应类型的对象名称做命名。

DI依赖注入:侧重实现

说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

两者关系:它们是spring核心思想的不同方面的描述。


三、Spring第一个案例[无需new关键字,创建Student对象]

具体步骤:

①创建Student实体类

②在src下创建applicationContext.xml配置文件

③ 测试类

---引入核心jar包:[Beans、Core、Context、Expression]

---创建实体类Student 可植入相应的属性值

---在src下编写Spring配置文件

头文件查找位置:源码

applicationContext.xml:

注:在spring配置文件中,使用<bean>元素来定义Bean实例(也可称为组件)。有两个常用属性:一个是id,表示定义的Bean实例的名称,另一个是Class,表示定义的Bean实例的类型

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="
5 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
6
7 <bean id="stu" class="cn.happy.entity.Student">
8 <property name="name" value="呵呵"></property>
9 <property name="age" value="13"></property>
10
11 </bean>
12
13 </beans>

--进行测试Test

通过ClassPathXmlApplicationContext实例化Spring的上下文,并通过ApplicationContext的getBean()方法,根据id来获取Bean实例。ApplicationContext是一个接口,负责读取Spring配置文件,管理对象的加载,生成,维护Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期。ClassPathXmlApplicationContext是ApplicationContext接口的实现类,用于从classpath路径中读取spring配置文件。

1 public class Test01 {
2 @Test
3 public void addTest(){
4 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
5 Student stus=(Student) ctx.getBean("stu");
6 System.out.println(stus);
7
8 }

输出结果:


四、依赖注入[DI]

通过不同的纸张和不同类型墨盒的组合,来装配出一台打印机。

具体步骤:

①分层创建墨盒和纸张接口

②实现类

③在配置文件中装配

--在ink包下创建Ink接口和其实现类

ink接口:

public interface Ink {
public String getColor();
}

实现类:

public class ColorInk implements Ink{

    public String getColor() {

        return "彩色墨盒";
} }
public class BlackInk implements Ink{

    public String getColor() {

        return "黑色墨盒";
} }

--在paper包下创建paper接口和其实现类

paper接口:

public interface Paper {
public String getContent();
}

实现类:

public class A4Paper implements Paper{

    public String getContent() {
return "我是A4";
} }
public class B5Paper implements Paper{
public String getContent() {
return "我是B5";
} }

--在printer包下创建Print类,并植入ink,paper成员变量,称为域属性。封装,以及打印的方法。

public class Print {
private Ink ink;
private Paper paper; public void print(){
System.out.println("用"+ink.getColor()+"打印"+paper.getContent()+"纸张");
}

--配置文件,并对ink和paper以及打印机进行配置

--测试类。强转的是打印机类print

1 public class SpringTest {
2 @Test
3 public void test1(){
4 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
5 Print pri=(Print) ctx.getBean("printer");
6 pri.print();
7 }

输出结果:


五、Spring AOP[Aspect Oriented Programming] 面向切面编程

AOP原理:

将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决

采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能

AOP目的:

从系统中分离出切面,独立于业务逻辑实现

如何使用AOP?

具体步骤:

①在项目中添加Spring AOP相关的JAR文件

②编写前置增强和后置增强实现日志功能

③编写Spring文件,对业务方法进行增强处理

④编写代码获取带有增强处理的业务对象

--添加相关jar文件:

--业务类:并实现特定接口,在该方法中并没有实现日志输出功能

ISomeService:

SomeService:

--接下来就以AOP方式为该方法添加日志功能,编写增强类

通过 MethodBeforeAdvice实现前置增强

通过AfterReturningAdvice实现后置增强

--Spring配置文件进行组件声明。

注:头文件需引入对应的aop

--接下来在Spring配置文件中实现Aop配置,首先定义切入点。execution是切入点指示符,它的括号中是一个切入点表达式,可以配置要切入的方法,切入点表达式支持模糊匹配

--测试类

标红注意点:

关于接口的一个问题:

如果一个类实现了一个接口,默认使用的代理是JDK动态代理

如果一个类没有实现任何接口,默认使用的是cglib动态代理

在这里倘若强转的是类SomeService类,则会报如下错误:

实现效果:

第一章 spring核心概念的更多相关文章

  1. 第五章 Spring核心概念

     5.1.1 企业级应用开发    企业级应用是指那些为商业组织,大型企业而创建部署的解决方案及应用,大型企业级应用的结构复杂,涉及的外部资源众多,事务密集,数据规模大,用户数量多,有较强的安全性考虑 ...

  2. SSM 五:Spring核心概念

    第五章:Spring核心概念 一.Spring Ioc 优点: 1.低侵入式设计 2.独立于各种应用服务器 3.依赖注入特性将组建关系透明化,降低耦合度 4.面向切面编程的特性允许将通用性任务集中式处 ...

  3. 20190813 On Java8 第一章 对象的概念

    第一章 对象的概念 抽象 Alan Kay 总结了对象的五大基本特征 万物皆对象. 程序是一组对象,通过消息传递来告知彼此该做什么. 每个对象都有自己的存储空间,可容纳其他对象. 每个对象都有一种类型 ...

  4. Spring 核心概念

    Spring 核心概念 引言 本文主要介绍 Spring 源码中使用到的一些核心类 1. BeanDefinition BeanDefinition表示Bean定义,BeanDefinition 中存 ...

  5. Spring系列(一):Spring核心概念

    一.Spring概念 Spring是一种多层的J2EE应用程序框架,其核心就是管理资源组件以及依赖关系,Spring框架为现代基于java的企业应用程序提供了一个全面的编程和配置模型. 二.Sprin ...

  6. Spring核心概念和案例

    一.Spring概念 1.Spring框架概述 轻量级的Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建, Spring框架提供了一个开发平台,用于整合其他技 ...

  7. Javascript本质第一篇:核心概念

    很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...

  8. 第一章 Spring整体框架和环境搭建

    1.Spring 的整体架构 Spring框架主要由7大模块组成,它们提供了企业级开发需要的所有功能,而且每个模块都可以单独使用,也可以和其他模块组合使用,灵活且方便的部署可以使开发的程序更加简洁灵活 ...

  9. Spring in Action 第一章 Spring之旅

    1.1 简化Java开发 1.1.2 依赖注入(DI) 松耦合:如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能在对象本身毫不知情的情况下,用不同的具体实现进行替代 ...

随机推荐

  1. Cursor的用法

    文章主要来自于::::http://www.cnblogs.com/TerryBlog/archive/2010/07/05/1771459.html 主要为了自己学习方便,侵删!!!! 使用过 SQ ...

  2. 2016年4月最佳的20款 jQuery 插件推荐

    这个列表包括20个我们觉得是最有用的免费的 jQuery 插件,它们都是最具创新性和最省时省力的解决方案,很多都是现代化的设计和开发中碰到的问题的处理方案.如果你熟悉下面列出的任何插件,请与我们的读者 ...

  3. 图标字体(IconFont)制作

    图标字体(IconFont)介绍 图标字体(IconFont)现在越来越被广泛使用,大大提高了网页的多样化,解决了视网膜屏幕失真的问题. 据说微软从IE4开始支持的这个私有方法(@font-face) ...

  4. Quartz2D简介

    Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作:

  5. centos 6.0用yum安装中文输入法

    Centos6.2代码 CentOS 6.0没有默认没有装语言支持(Language Support),因此很不方面. 终于发现了有效的方法: su root yum install "@C ...

  6. Linux安全基础:shell及一些基础命令

    1.什么是shell?Shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash. 2.shell的分类(1)bash bash shell 是 Bourn ...

  7. MyEclipse使用心得:SVN插件安装方法

    1.在线安装,打开myeclipse,help--->MyEclipse Configuration Center 2.点击Add Site 打开对话框,在对话框Name输入Svn,URL中输入 ...

  8. Android原生json和fastjson的简单使用

    android原生操作json数据 主要是两个类 JSONObject 操作对象     JONSArray操作json数组 对象转json //创建学生对象 Student student=new ...

  9. iOS开发之Socket

    在IOS开发中,网络请求链接往往是HTTP请求,但是有些需求比较特殊,需要保持持续连接,就需要用到Socket了. 另外在游戏开发中,常常会用到Socket连接,因为http请求数据往往需要用户主动请 ...

  10. netstat监控大量ESTABLISHED连接与Time_Wait连接问题

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...