轻量级的 DI / IoC 和 AOP 容器的开源框架php
Controller -> Service -> Dao
UserControoler
private UserService userService = new UserService();
复制代码
使用后:由spring建立,自动导入web
能够解耦核⼼业务和边缘业务的关系redis
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
复制代码
id是别名,property是给实体类的属性注入值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 https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="video" class="cn.junko.domain.Video">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
</bean>
</beans>
复制代码
public class app {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Video video = (Video) applicationContext.getBean("video");
System.out.println(video.getName());
}
}
复制代码
打印一下,可以成功获得对象和数据编程
这里讲一下基础的xml配置标签缓存
ApplicationContext是spring 的核心接口,应用程序上下文,只要是spring对象被扫描以后,就能够在这里进行管理获取,而ClassPathXmlApplicationContext就可以在这个类路径下面去找xml,而后根据bean的id和name去取对应容器里面的对象。包括后续哪里须要注入的时候就能注入进去,不须要手工去new,只须要get一下session
IOC Inverse of Control(控制反转)是⼀种设计思想 将本来在程序中⼿动建立对象的流 程,交由Spring框架来管理 核⼼:把建立对象的控制权反转给Spring框架,对象的⽣命周期由 Spring统⼀管理,即mybatis
DI Dependency Injection ,依赖注⼊ IOC容器在运⾏期间,动态地将对象某种依赖关系注⼊到对象之中,⽐如视频订单对象,依赖⽤视 频对象 建立另外一个实体类,在里面加入Video的对象,而后编写xml文件app
<bean id="video" class="cn.junko.domain.Video">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
</bean>
<bean id="videoOrder" class="cn.junko.domain.VideoOrder">
<property name="id" value="1"></property>
<property name="outTrade" value="123123123"></property>
<property name="video" ref="video"></property>
</bean>
复制代码
VideoOrder videoOrder= (VideoOrder) applicationContext.getBean("videoOrder");
System.out.println(videoOrder.getId());
System.out.println(videoOrder.getVideo().getName());
复制代码
在bean标签中,可让咱们告诉spring何时产生一个新的bean,仍是用单个bean,这就是scope的做用
当使用scope=singleton建立对象,地址是同样的
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
</bean>
复制代码
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<constructor-arg name="id" value="2"></constructor-arg>
<constructor-arg name="name" value="123123"></constructor-arg>
</bean>
复制代码
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<constructor-arg name="id" value="2"></constructor-arg>
<constructor-arg name="name" value="123123"></constructor-arg>
</bean>
<bean id="videoOrder" class="cn.junko.domain.VideoOrder">
<property name="id" value="1"></property>
<property name="outTrade" value="123123123"></property>
<property name="video" ref="video"></property>
</bean>
复制代码
注意: 类的构造函数重写的时候,⼀定要保留空构造函数!!!
在实体类中添加list和map并生成对应的方法
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
<property name="list1">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<property name="map1">
<map>
<entry key="1" value="1111111"></entry>
<entry key="2" value="2222222"></entry>
<entry key="3" value="3333333"></entry>
</map>
</property>
</bean>
复制代码
bean继承:两个类之间⼤多数的属性都相同,避免重复配置,经过bean标签的parent属性重⽤已 有的Bean元素的配置信息 继承指的是配置信息的复⽤,和Java类的继承没有关系
<bean id="video" class="cn.junko.domain.Video" scope="singleton" parent="video">
<property name="name" value="这是video2"></property>
</bean>
复制代码
若是类A是做为类B的属性, 想要类A⽐类B先实例化,设置两个Bean的依赖关系
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<property name="id" value="9"/>
<property name="title" value="spring1" />
</bean>
<!--设置两个bean的关系,video要先于videoOrder实例化-->
<bean id="videoOrder" class="cn.junko.domain.VideoOrder" dependson="video">
<property name="id" value="8" />
<property name="outTradeNo" value="777777"/>
<property name="video" ref="video"/>
</bean>
复制代码