我们为什么要学习Spring框架?
Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%
专业角度
企业级开发:Spring使用率>90%
简化开发
框架整合
目前我们使用的是Spring几版本?
spring家族:
通过系统架构图,Spring能不能进行数据层开发?Spring能不能进行web层开发?
4.x架构图趋于成熟
Aspect不是spring原创,是别人的东西spring觉得非常之好,拿过来直接用,所以导包时要单独导Aspect包(依赖)
问题1:目前我们的代码存在什么问题以及怎么解决这些问题?
问题2:请描述什么是IOC,什么是DI?
IOC(Inversion of Control)控制反转
使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。通俗的讲就是“将new对象的权利交给Spring,我们从Spring中获取对象使用即可”
Spring技术对IoC思想进行了实现
Spring提供了一个容器,称为IOC容器,用来充当IoC思想中的“外部”
IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
IOC容器也叫Spring容器,就是上图中的Core Container
IoC容器充当Ioc思想中的“外部”就是说:主动new对象改成由IoC容器提供对象
DI(Dependency Injection)依赖注入
service和bean都在IoC容器中被管理,他们之间又有关系,那么IoC容器不妨直接将他们之间关系绑定好,这个过程成为:DI
高内聚,低耦合,一切的一切就是要减少类与类(代码与代码)之间的关系,但是类与类之间又有着不可分割的关系,那么全部不能写死,全部关系变成动态的有关,代码都抽象到接口层面,都不写死,就充分解耦了。最后维护时改了A不影响B,改了B不影响C…
// TODO 下面还未整理好
【第一步】导入Spring坐标
【第二步】定义Spring管理的类(接口)
【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象
【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取bean对象
【第一步】导入Spring坐标
org.springframework spring-context 5.2.10.RELEASE
【第二步】定义Spring管理的类(接口)
public interface BookDao {public void save();
}public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ...");}
}
public interface BookService {public void save();
}public class BookServiceImpl implements BookService {private BookDao bookDao = new BookDaoImpl();public void save() {System.out.println("book service save ...");bookDao.save();}
}
【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象
注意事项:bean定义时id属性在同一个上下文中(IOC容器中)不能重复
【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取Bean对象
public class App {public static void main(String[] args) {//1.创建IoC容器对象,加载spring核心配置文件ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//2 从IOC容器中获取Bean对象(BookService对象)BookService bookService= (BookService)ctx.getBean("bookService");//3 调用Bean对象(BookService对象)的方法bookService.save();}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Mt4oRn4-1678892527624)(assets/image-20210729184337603.png)]
【第一步】删除使用new的形式创建对象的代码
【第二步】提供依赖对象对应的setter方法
【第三步】配置service与dao之间的关系
【第一步】删除使用new的形式创建对象的代码
public class BookServiceImpl implements BookService {private BookDao bookDao; //【第一步】删除使用new的形式创建对象的代码public void save() {System.out.println("book service save ...");bookDao.save();}
}
【第二步】提供依赖对象对应的setter方法
public class BookServiceImpl implements BookService {private BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}//【第二步】提供依赖对象对应的setter方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
【第三步】配置service与dao之间的关系
在applicationContext.xml中配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFqgFZSX-1678892527624)(assets/image-20210729183104748.png)]
下一篇:Nginx核心配置指令