学习材料
尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)
IoC注解
首先这是最常用的方法。(在学Java基础的时候明明是非常不起眼的知识点啊!!!)
从 Java 5 开始,Java 增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。
Spring 从 2.5 版本开始提供了对注解技术的全面支持,我们可以使用注解来实现自动装配,简化 Spring 的 XML 配置。
Spring 通过注解实现自动装配的步骤如下:1. 引入依赖 2. 开启组件扫描 3. 使用注解定义 Bean 4. 依赖注入
环境依赖和xml一样,就是spring+junit+log4j2(还有对应的配置文件转移到resource里面,这里指的是pom.xml)。
值得注意的是要开启组件扫描,且beans这个一级标签(之前都是称为头文件,哈哈哈)要进行更改(这里指的是bean.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启组件扫描功能-->
<context:component-scan base-package="com.atguigu.spring6"></context:component-scan>
</beans>
值得注意的是,可以在设置文件中,设置排除或包含哪些文件。
1.在不同层用不同的注解
切记,以下的@Autowired和@Resouce都是配合以上表格的注解使用的。作用是注入。
2.@Autowired 根据类型进行装配
可标注的范围广,应用场景广。
这里需要注意的是,一个接口多个实现类,需要配合@Qualifier注解联合,通过名字
@Autowired
@Qualifier("userDaoImpl") // 指定bean的名字
private UserDao userDao;
3.@Resource注入 根据名字进行装配
应用场景:
是jdk自己本身的拓展包。需要引入依赖。
只用在属性和setter上,相比于Spring自己的@Autowired少了应用在构造器的部分。且寻找根据不同。
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>
@Repository("myUserDao")
public class UserDaoImpl implements UserDao {
@Override
public void print() {
System.out.println("Dao层执行结束");
}
}
@Resource(name = "myUserDao")
private UserDao myUserDao;
全注解开发
创建config类来替代xml配置文件。
package com.atguigu.spring6.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
//@ComponentScan({"com.atguigu.spring6.controller", "com.atguigu.spring6.service","com.atguigu.spring6.dao"})
@ComponentScan("com.atguigu.spring6")
public class Spring6Config {
}
@Test
public void testAllAnnotation(){
ApplicationContext context = new AnnotationConfigApplicationContext(Spring6Config.class);
UserController userController = context.getBean("userController", UserController.class);
userController.out();
logger.info("执行成功");
}