手拉手入门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


目录
相关文章
|
5天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
23 4
SpringBoot必须掌握的常用注解!
|
7天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
41 2
|
7天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
25 1
|
9天前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
16天前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。
|
2天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
6 0
|
14天前
|
存储 Java 数据管理
强大!用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能
本文深入介绍了如何在Spring Boot应用中使用`@Audited`注解和`spring-data-envers`实现数据审计功能,涵盖从添加依赖、配置实体类到查询审计数据的具体步骤,助力开发人员构建更加透明、合规的应用系统。
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
27天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
139 2
|
3月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决