手拉手入门Spring6之Ioc注解开发

简介: 组件,控制器,业务、仓库控制器,业务、仓库都是组件的别名@Component@Controller@Service@Repository

组件,控制器,业务、仓库

控制器,业务、仓库都是组件的别名

@Component

@Controller

@Service

@Repository

111.png112.png113.png114.png115.png




     





 


Spring6之Ioc注解的使用

pomxml加入aop的依赖

<!-- 引入Spring context依赖-->

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-context</artifactId>

           <version>6.0.0-M2</version>

       </dependency>

13.png


SpringConfig.xml主配置文件

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd


14.png15.png


Bean类上使用注解

value是默认的

 

16.png17.png







组件扫描

<!--        组件扫描-->

       <context:component-scan base-package="com.spring.bean"></context:component-scan>

<!--组件扫描多个包-->

<!--        <context:component-scan base-package="com.spring.bean,com.spring.web"></context:component-scan>-->

<!--        <context:component-scan base-package="com.spring"></context:component-scan>-->

测试类

@Test

   public void  AnnotationDemo(){

       ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");

       Object studentBean = applicationContext.getBean("StudentBean");

       Object userBean = applicationContext.getBean("userBean");

       Object orderBean = applicationContext.getBean("OrderBean");

       Object teacherBean = applicationContext.getBean("TeacherBean");

       System.out.println(studentBean);

       System.out.println(userBean);

       System.out.println(orderBean);

       System.out.println(teacherBean);

   }

选择性实例化Bean

<!--    第一种 use-default-filters="false"如果是false表示这个包下所有带有声明的注解全部失效

<context:component-scan base-package="com.Bean" use-default-filters="false"/>

     

-->

   <context:component-scan base-package="com.Bean" use-default-filters="false">

                                               <!-- 想让那个注解生效就选择那个       只有生效Component -->

       <context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>

   </context:component-scan>

<!--    第二种:

use-default-filters="ture" 所有带有注解的全部生效,不写use-default-filters,则默认为true

-->

   <context:component-scan base-package="com.Bean" use-default-filters="true">

       <!-- 排除谁不生效 (谁不生效)除了Controller不生效,其他都生效-->

       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

   </context:component-scan>

@Value(注入)注解

SpringConfig.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.xsd

                          http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">

<!--        组件扫描-->

       <context:component-scan base-package="com.spring.bean"></context:component-scan>

</beans>

//当属性是简单数据类型的时候,可以使用@Value注解进行注入

@Value是用来代替<property name="name" value="张三"/>

11.png

public class Student {

   @Value("张三")

   private String name;

   @Value("20")

   private int age;

--get、set、toString--

}

12.png



@Autowired(注入)注解

@Autowired可以用来注入非简单类型。单独使用@Autowired注解:默认根据类型装配。[默认byType]

@Autowired可以出现在构造方法,方法,参数,属性,别的注解上。

public interface StudentDao {

   void insert();

}

@Repository("StudentDaoImpl")

public class StudentDaoImpl implements StudentDao{

   @Override

   public void insert() {

       System.out.println("StudentDaoImpl");

   }

}

@Service("StudentService")

public class StudentService {

   @Autowired

   StudentDao studentDao;

   public void test(){

       studentDao.insert();

   }

}

//测试类

@Test

public void AnnotationInto(){

   ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");

   StudentService studentService = applicationContext.getBean("StudentService", StudentService.class);

   studentService.test();

}

8.png


@Qualifier(注入)注解

//当有多个实现类对象时,@Autowired和Qualifier联合使用,可以根据名称进行装配

//Qualifier可以指定要执行的实现类对象


7.png


public interface StudentDao {

   void insert();

}

@Repository("StudentDaoImpl")

public class StudentDaoImpl implements StudentDao{

   @Override

   public void insert() {

       System.out.println("StudentDaoImpl");

   }

}

@Repository("StudentDaoImpl2")

public class StudentDaoImpl2 implements StudentDao{

   @Override

   public void insert() {

       System.out.println("StudentDaoImpl2");

   }

}

//无法自动匹配。“studentdao”类型的bean不止一个。由此可见@Autowired不能在多个相同类型的Bean对象中使用。


6.png


@Service("StudentService")

public class StudentService {

   @Autowired

   @Qualifier("StudentDaoImpl2")

   StudentDao studentDao;

   public void test(){

       studentDao.insert();

   }

}

//测试

@Test

public void AnnotationInto(){

   ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");

   StudentService studentService = applicationContext.getBean("StudentService", StudentService.class);

   studentService.test();

}


5.png

@Resource注入注解(推荐)

@Resource注解是JDK扩展包中的,属于JDK的一部分。该注解是标准注解,更加具有通用性。(JSR-250标准中指定的注解类型。JSR是Java规范提案)

@Autowired注解是Spring框架的。

@Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型byType装配。

@Autowired注解默认根据类型装配byType,@Autowired想根据名称装配,需要配合@Qualifier注解一起用。

@Resource注解可以用在属性上,set方法上。

@Autowired注解可以用在属性上,set方法上,构造方法上,构造方法参数上。

@Resource注解是JDK扩展包,不在JDK当中,需要引入依赖。

Spring6不在支持JavaEE,它支持的是JakartaEE9。

Spring6使用这个依赖

Spring6使用这个依赖

       <dependency>

           <groupId>jakarta.annotation</groupId>

           <artifactId>jakarta.annotation-api</artifactId>

           <version>2.1.0</version>

       </dependency>

Spring5使用这个依赖

       <dependency>

           <groupId>jakarta.annotation</groupId>

           <artifactId>jakarta.annotation-api</artifactId>

           <version>1.3.2</version>

       </dependency>


4.png



public interface StudentDao {

   void insert();

}

@Repository("StudentDaoImpl")

public class StudentDaoImpl implements StudentDao{

   @Override

   public void insert() {

       System.out.println("StudentDaoImpl");

   }

}

@Repository("StudentDaoImpl2")

public class StudentDaoImpl2 implements StudentDao{

   @Override

   public void insert() {

       System.out.println("StudentDaoImpl2");

   }

}

@Service("StudentService")

public class StudentService {

   //@Autowired

   //@Qualifier("StudentDaoImpl2")

   @Resource(name ="StudentDaoImpl2")

   StudentDao studentDao;

   public void test(){

       studentDao.insert();

   }

}

//测试

@Test

public void AnnotationInto(){

   ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");

   StudentService studentService = applicationContext.getBean("StudentService", StudentService.class);

   studentService.test();

}


3.png


Java类代替SpringConfig.xml配置文件(全注解开发)


2.png

//创建一个类来代替SpringConfig.xml

@Configuration

//组件扫描

@ComponentScan({"com.spring.bean","com.spring.Dao"})

public class SpringConfig {

}

//测试

@Test

   public void AnnotationInto(){

       ApplicationContext applicationContext =new AnnotationConfigApplicationContext(SpringConfig.class);

       StudentService studentService = applicationContext.getBean("StudentService", StudentService.class);

       studentService.test();

   }

1.png


目录
相关文章
|
8天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
26 0
|
15天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
41 4
SpringBoot必须掌握的常用注解!
|
5天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
17 2
|
17天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
58 2
|
17天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
33 1
|
10天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
23 0
|
11天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
6月前
|
Java API Spring
Spring容器如何使用一个注解来指定一个类型为配置类型
Spring容器如何使用一个注解来指定一个类型为配置类型
52 0
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
46 0
|
5月前
|
XML Java 数据格式
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
51 0