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. HDU-6035:Colorful Tree(虚树+DP)

    这里有三道长得像的题: 一:HDU6036: There is a tree with nn nodes, each of which has a type of color represented ...

  2. bzoj 3771: Triple 快速傅里叶变换 FFT

    题目大意: 给出\(n\)个互不相同的物品,每个物品有价值\(x_i(x_i \leq 40000)\)如果可以从中取一个或两个或三个物品.问能够组合出来的所有价值和对应的方案数,全部输出.取值时,\ ...

  3. vue之axios+php+mysql

    博主原创,未经许可请勿转载 哦 1.axios配置请看上篇 2.mysql数据库编写,表名为area_list 3.json.php文件在notebeans中编写 <?php header('C ...

  4. 自动拆装箱(int,Integer)

    包装类型Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个 ...

  5. js 时间格式处理插件 moment

    官网: http://momentjs.cn/docs/#/plugins/ 各种API官网上都有详细的例子,这里就不做一一说明. 重点讲两个常用的: 一.获取当前日期 moment().format ...

  6. 发个IOCP的C++例子

    IOCP的c++例子 IOCP这个东西连续关注了将近3年的时间,这个代码从哪里找到的已经忘了,下面是作者的信息.感谢他提供的代码! /*++ Copyright (c) 2004 模块名: iomod ...

  7. 五 akka streams kafka

    (转载 https://doc.akka.io/docs/akka-stream-kafka/current/home.html) 一: Akka Streams Kafka, also known ...

  8. Pointer 指针

    利用指针访问对象,指针指向一个对象,允许使用解引用符(操作符*)来访问对象 int ival = 42; int *p = &ival;//p存放变量ival的内存地址,p是指向变量ival的 ...

  9. 【252】◀▶IEW-Unit17

    Unit 17 Social Issues: Population 复杂表格写作技巧 1.Model1对应图片分析 The table contains information about the d ...

  10. iview组件select之默认展示label,并传空value做方法入参

    要求: 默认查询操作日期在当日的数据:(打开页面时默认选中时间.全部) 后台约定:选定“全部”这个条件,传的值是空"" 综上:使用select选择框的v-model绑定数据,使用: ...