Spring (容器) 概述:

01.Java EE开发者的春天
02.主要目的是 降低业务逻辑层和其他层的耦合度 IOC
03.spring容器是用来创建(new)和管理(对象之间的关系)程序中所有对象的实例
04.非侵入式轻量级开源框架
001. 侵入式需要我们显示的使用框架中的API才能实现某种功能!
框架强行的将功能推送给我们!
002.非侵入式不需要改变我们之前的编码!
我们自愿从框架中获取想要的功能!
05.一站式(full stack)开发
001. 我们先去A酒店吃饭
002. B娱乐场所唱歌
003. C场所足疗

吃饭,唱歌,足疗这三个功能都在一个D商务会馆中实现!
那么D商务会馆就是一条龙服务! (一站式)
06.spring的核心
001.IOC (Inversin Of Control) 控制反转
之前我们在service层创建dao的实例对象! 控制权在service!
现在我们创建dao的实例对象任务交给spring容器,控制权在spring容器!
这种控制权由我们程序本身交给spring容器的行为,我们称之为IOC(控制反转)!

DI(Dependency Injection)依赖注入
之前service层的代码
com.xdf.dao.StudentDao dao=new StudentDaoImpl();
现在
com.xdf.dao.StudentDao dao=null;
public void setDao(com.xdf.dao.StudentDao stuDao){
this.dao=stuDao;
}
我们只需要在spring容器中配置StudentDao,
stuDao就有值了,然后通过调用setDao()给this.dao赋值

spring容器给我们创建了对象的实例,然后通过setXxx(),
把对象的实例给我们需要的地方,这个过程我们称之为DI(依赖注入);

002.AOP (Aspect Oriented Programming)面向切面编程 底层就是动态代理设计模式
专业术语:

01.切面(Aspect):就是系统级业务,对主业务进行增强!
02.织入(Weaving):将系统级业务放进主业务的过程!
03.连接点(JoinPoint):所有的主业务方法都是连接点!
04.切入点(PointCut):切面(系统级业务方法)织入到主业务方法,这个方法就是切入点!
05.目标对象(Target):要被增强的对象!
UserService user=New UserServiceImpl();
user就是目标对象!
06.通知(Advice):是切面的一种实现方式,定义了织入的时间!
07.顾问(Advisor):是切面的一种实现方式,定义了织入的时间,织入的位置!
通知是顾问的一个属性!顾问包含通知!

07.spring框架中的核心设计模式
01.工厂
02.反射
03.单例
04.代理
05.适配器

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Spring</artifactId>
<groupId>com.xdf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.</modelVersion> <artifactId>01SpringBase</artifactId>
<packaging>jar</packaging> <name>01SpringBase</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
<!--spring对应的版本号-->
<spring.version>4.2..RELEASE</spring.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency> <!--引入需要的spring 核心jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.</version>
</dependency> </dependencies>
</project>
/**
* Student对应的接口类
*/
public interface StudentDao { /**
* 打招呼的方法
*/
void sayHello(); /**
* @return 吃饭方法
*/
String eat(); }
/**
* student实体类
*/
public class Student { private int age;
private String name; public Student(int age, String name) {
this.age = age;
this.name = name;
} public Student() {
System.out.println("student=====实例化");
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public class StudentDaoImpl  implements StudentDao{

    public StudentDaoImpl(){
System.out.println("StudentDaoImpl=======实例化");
} /**
* 打招呼的方法
*/
public void sayHello() {
System.out.println("学生打招呼的方法");
} /**
* @return 吃饭方法
*/
public String eat() {
System.out.println("学生吃饭方法");
return "apple";
}
}

01SpringBase的更多相关文章

  1. Spring笔记01(基础知识)

    1.基础知识 01.Spring:轻量级Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建. 02.目标:实现一个全方位的整合框架,实现“一站式”的企业应用开发 ...

随机推荐

  1. Spring笔记06(Spring AOP的底层实现动态代理)

    1.代理模式readMe: 代理设计模式: 是java中常用的设计模式! 特点: .委托类和代理类有相同的接口或者共同的父类! .代理类为委托类负责处理消息,并将消息转发给委托类! .委托类和代理类对 ...

  2. BZOJ_1304_[CQOI2009]叶子的染色_树形DP

    BZOJ_1304_[CQOI2009]叶子的染色_树形DP Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白 ...

  3. 闪回之 Flashback Query (dml表、过程、函数、包等)、Flashback version Query

    Flashback Query 背景:Flashback 是 ORACLE 自 9i 就开始提供的一项特性,在 9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数 ...

  4. 排名Top 16的Java实用类库

    (转载: http://www.hollischuang.com/archives/1606) github地址: https://github.com/liufeiSAP/javaStudy.git ...

  5. linux 中C语言便于调试的宏定义编写及 __FILE__,__FUNCTION__, __LINE__参数使用

    转自:http://blog.csdn.net/edonlii/article/details/8491342/ 在linux编程中,当文件数量变的众多之后,使用gdb调试就是一场灾难.因此在程序中加 ...

  6. 删除win7快捷方式小箭头

    删除win7快捷方式小箭头 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Sh ...

  7. 《SpringBoot揭秘 快速构建微服务体系》读后感(一)

    SpringIOC IOC有两种方式:一种是DI,另一种是DL,即Dependency Lookup(依赖查找).前者是当前软件实体被动接受其依赖的其他组件被IoC容器注入,而后者则是当前软件实体主动 ...

  8. Spring入门第十七课

    AOP编程 问题: 代码混乱: 越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀,每个方法在处理核心逻辑的同事还必须兼顾其他多个关注点. 代码分散:以日志需求为例,只是为了满足这个单 ...

  9. Ext.net Calendar 控件在有模板页的时候,模板页定义了TD的样式造成日历控件的样式丢掉

    Ext.net Calendar 控件在有模板页的时候,模板页定义了TD的样式造成日历控件的样式丢掉 解决方案 在本页面添加下面的样式 <style type="text/css&qu ...

  10. nginx是如何处理一个请求的(包含https配置)

    配置https首先要有ssl证书,这个证书目前阿里有免费的,但如果自己做实验,也是可以自签证书,只不过不受信 openssl genrsa -des3 -out server.key 1024     ...