什么是spring(春天)?
1.spring它是一款开源框架,它用来解决企业开发的复杂性。
2.spring框架提供了两个核心技术:IOC和AOP
IOC:控制反转。把创建对象的权力交于spring框架来创建。并且管理对象的生命周期
AOP:面向切面编程。在不改变源码的基础可以对我们的代码进行扩展。
3.spring框架有什么特点:
1.方便解耦,简化开发。
2.AOP编程的支持--更方便对源码进行扩展
3.声明式事务的支持
4.方便集成各种优秀框架--mybatis hibernate mybatis-plus 等
5.方便程序的测试--spring提供了自己的单元测试。
为什么使用spring?
控制正转 会出现类与类之间耦合。 缺点:可维护性差。
使用工厂模式+接口解决控制正转的缺陷
工厂模式虽然解决了等号右边创建对象的依赖的问题,但是没有解决等于左边的依赖问题。可以使用接口。如果这时1000个依赖Food的类,Food即使升级为Food1也只需要改变FoodFactory中这一处代码即可。我们自己通过工厂模式+接口虽然解决了上面类与类之间的依赖关系。但是还有很多考虑不周的地方,那么是否存在一款框架能更好的解决上面的依赖关系吗?--有。spring提供的IOC技术。IOC底层使用的就是工厂模式。
spring-IOC
1 IOC概述
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,交于spring容器来帮你创建类对象。
IOC: 把创建对象的权力交于spring框架来完成。
DI: 自动注入给依赖的对象。
2 如何使用IOC功能
依赖
<!--springmvc springboot spring springsecurity这些都是spring全家桶-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
spring配置文件
<?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.xsd">
<!--bean:表示spring容器关联的类对象标签。
id: bean的唯一标识
class:表示spring管理的类名
-->
<bean id="food2" class="com.ykq.demo02.Food"></bean>
</beans>
测试
public class Test {
public static void main(String[] args) {
// Food food=new Food();
// food.info();
//1.加载spring容器。
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
//2.获取指定的对象
IFood food= (IFood) ac.getBean("food2");
food.info();
}
}
3 获取bean的方式
根据id获取
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//读取spring配置文件。 获取spring容器
Teacher t = (Teacher) app.getBean("t"); //从容器中获取指定id的bean.
t.eat(); //调用方法
}
缺点: 需要强制转换。类型转换安全隐患。
通过反射类获取
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//读取spring配置文件。 获取spring容器
// Teacher t = (Teacher) app.getBean("t"); //从容器中获取指定id的bean.
Teacher bean = app.getBean(Teacher.class); //从容器中获取指定类型的bean
bean.eat();
}
如果容器中出现多个同类型的bean则出现错误。
通过id和反射类结合获取bean
public class Test02 {
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//读取spring配置文件。 获取spring容器
// Teacher t = (Teacher) app.getBean("t"); //从容器中获取指定id的bean.
// Teacher bean = app.getBean(Teacher.class); //从容器中获取指定类型的bean
Teacher bean = app.getBean("t1", Teacher.class); //根据id和反射类结合获取
bean.eat();
}
}
4 使用注解完成bean的创建
上面我们在xml文件中通过bean标签,已经完成了bean创建交于spring来管理。如果有大量的类都需要交于spring创建,那么我们就需要在xml中写大量的bean标签。spring提高了注解方式。
常用注解都有哪些?
@Component: 不属于下面三层任意一个。建议使用这个。
@Service:表示业务层交于spring管理
@Controller: 表示控制层类交给spring
@Repository: 表示dao层类交于spring管理
@Service 和@Controller @Repository注解等价于@Component. 因为我们的代码是否是要分层编写。dao,controller,service业务层。 不同层可以使用不同的注解加以区分。
5 springbean的作用域。
- singleton: 单例--spring创建该bean时只创建一次。
- prototype: 多例--每次获取bean对象时,都会创建一个新的bean对象。
- request: 每次请求创建一个bean对象。
- session: 同一个会话创建一个bean对象。
request和session适合在web开发模式下使用。
spring完成依赖注入DI
上面我们知道spring可以帮你完成bean对象的创建。 如果某个类依赖另一个类对象。我们也可以使用spring的di功能。
DI( Dependency Injection ):依赖注入 就是给对象中的属性注入相应的值.
IOC控制反转的最终目的就是降低程序的耦合,也就是削减依赖关系。
依赖关系的管理以后都交给spring维护,依赖关系的管理就称之为依赖注入。也就是说在当前类需要用到其它类的对象时,由spring为我们提供,我们只需要在配置文件中说明依赖关系的维护就可以了。
1 注入的方式有哪些?
第一种通过set方法注入。
第二种通过构造方法注入
标签:依赖,spring,app,bean,IOC,Teacher From: https://www.cnblogs.com/xiaomubupi/p/18631259