IOC 控制反转
将对象的创建权交给IOC去管理,进而达到代码解耦合的目的( 比如业务层调DAO层,就必须要new一个DAO的对象,此时代码就定死了,代码就变得耦合 ,而用Spring的IOC容器管理Bean对象可以在配置文件中更改类,进而达到解耦)。
Bean标签基本配置
值得注意的是,随着scope属性值的改变,IOC中的Bean对象的创建时机也会不同。 当值为singleton时,Bean对象随着Spring的核心配置文件ApplicationContext的加载而被实例化(且实例化个数只有一个) ; 当值为prototype时,Bean对象只有在调用getBean()方法时才会被实例化(实例化个数可为多个)。
Bean实例化的三种方式
Bean默认是Spring通过无参构造帮我们创建,但有时可以通过配置不让它找无参构造,那便是工厂静态方法实例化,工厂实例方法实例化。
这种便是无参构造实例化。
<bean id="UserService" class="com.YuZai.Service.impl.UserServiceImpl">
<constructor-arg name="userDAO" ref="UserDao"></constructor-arg>
</bean>
主要还是使用无参构造方法实例化,工厂静态方法与工厂实例方法实例化还是较少。
.xml 配置文件系列
加载.Propertires文件
导入其他.xml配置文件
开启注解扫描
依赖注入
依赖注入(Dependency Injection) :它是Spring框架核心IOC的具体实现。
在编写程序时,通过控制反转,把对象的创建交给了Spring,但是代码中不可能出现没有依赖的情况。
IOC解耦只是降低他们的依赖关系,但不会消除。例如: 业务层仍会调用持久层的方法。
实例: 怎么将UserDao注入到UserService内部呢? ①set方法②构造方法③注解注入
Setter方法 注入
P命名空间注入本质也是Set注入
构造方法 注入
注解注入
@Autowired
自动注入,自动从Spring的上下文找到合适的Bean来注入。
@Resource
指定名称注入 (IOC容器中的Bean,也就是在核心配置中配置的Bean)
另外,@Resource是java自带的注解,不是Spring中的注解。@Resource注解完整的包路径为 javax.annotation.Resource。
@Qualifier
依赖注入的数据类型
注入引用数据类型
以上都是(依赖注入)。
注入基本数据类型
注入集合数据类型
Spring相关API
Spring配置数据源
加载外部.Properties文件,为DataSource注入值。
AOP 切面编程
声明式事务
Spring 注解开发
注解开发优势
Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
原始注解
Spring原始注解主要是替代<Bean>的配置
@Autowired,@Qualifier,@Resource 对象注入
@Componet 普通类Bean注入
@Repository Dao层Bean注入
@Service Service层Bean注入
测试
@Value 属性注入 (搭配${}实现解耦)
@Scope 设置Bean对象的单例还是多例
在Spring的.xml配置文件中它是这样子滴。
@PostConstruct Bean初始化方法注解
@PreDestroy Bean销毁方法注解
在原本Spring的.xml文件中的配置是这样滴。
新注解
@Configuration 配置类
指定当前类为Spring配置类。(相当于替代了.xml配置文件)
@ComponentSan 注解扫描
相当于.xml文件中的:
@PropertySource 加载.Propertyties文件
相当于.xml文件中的:
@Import 导入其他配置类
相当于.xml文件中的:
@ImportResource
Spring提供了一个 @ImportResource 注释,用于将自定义的 applicationContext.xml文件中的bean加载到Application Context中。
@ImportResource 不管是用 value= 还是locations = 又或者是缺省。
如果路径前面不加 file: 都是默认读取相对于 classpath 的路径
spring 很多配置都有这样的默认规则
@Bean 将方法的返回值加载到IOC中
相当于.xml文件中的:
使用注解后:
新注解开发实例
Spring整合Junit
坐标
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.19</version>
</dependency>
@runWith注解作⽤:
--@RunWith就是⼀个运⾏器
--@RunWith(JUnit4.class)就是指⽤JUnit4来运⾏
--@RunWith(SpringJUnit4ClassRunner.class),让测试运⾏于Spring测试环 境,以便在测试开始的时候⾃动创建Spring的应⽤上下⽂
--@RunWith(Suite.class)的话就是⼀套测试集合
Spring整合Junit测试时,使用@ContextConfiguration注解引入多个配置文件。
@ContextConfiguration(classes = SimpleConfiguration.class)
@ContextConfiguration(locations="../applicationContext.xml")
@Autowired 自动依赖注入对象