一.ioc常用注解
Spring 注解实现 IOC(Inversion of Control,控制反转)是通过使用一系列的注解来告诉 Spring 框架如何创建、管理和注入对象。下面详细介绍几个常用的注解及其作用:
-
@Component:
@Component
是一个通用的注解,用于标记一个类为 Spring 组件。被标记为@Component
的类将会被自动扫描并注册到 Spring 容器中,成为一个可由 Spring 管理的 Bean。 -
@Autowired:
@Autowired
用于自动注入依赖对象。通过在需要依赖注入的字段、构造方法或 setter 方法上添加@Autowired
注解,Spring 将会自动扫描容器中匹配类型的 Bean,并将其注入到对应的位置上。 -
@Qualifier: 当存在多个类型相同的 Bean 时,可以结合
@Autowired
注解一起使用,通过指定具体的 Bean 名称或限定符来确定要注入的实例。 -
@Value:
@Value
注解用于注入简单类型的值或者表达式的结果。可以将配置文件中的属性值注入到类的成员变量中。 -
@Primary: 当存在多个相同类型的 Bean 时,可以使用
@Primary
注解来指定默认的首选 Bean。 -
@Configuration: 使用
@Configuration
注解将一个类标记为配置类,其中定义了一些 Bean 的创建和配置方法。 -
@Bean: 在配置类中使用
@Bean
注解来声明一个 Bean 对象,Spring 容器会根据该方法的返回值来创建对应的 Bean 实例。 -
@ComponentScan:
@ComponentScan
用于指定需要进行组件扫描的基础包路径。通过在配置类上添加@ComponentScan
注解,Spring 将会自动扫描指定包及其子包下所有被@Component
或相关注解标记的类,并注册为 Bean。 -
@Scope:
@Scope
用于指定 Bean 的作用域,默认为单例模式(Singleton)。可以将作用域设置为原型模式(Prototype)、会话模式(Session)、请求模式(Request)等。 -
@PostConstruct 和 @PreDestroy:
@PostConstruct
和@PreDestroy
分别用于在 Bean 初始化完成后和销毁前执行特定的方法。这些方法可以用于执行一些初始化操作或资源清理等工作。
以上是常用的 Spring 注解,通过合理地使用这些注解,可以简化配置文件的编写,提高开发效率,并且便于理解和维护代码。需要注意的是,在使用注解时,要确保配置了适当的组件扫描和正确的注解使用方式,以保证 Spring 能够正确识别和处理注解。
二. 实现Spring ioc
实现 Spring IOC(Inversion of Control,控制反转)的注解方式,需要按照以下步骤进行详细操作:
-
添加依赖: 在项目的构建管理文件中如 Maven 的
pom.xml
,添加 Spring 相关的依赖,包括 Spring Core、Spring Context 等核心模块。 -
创建组件类: 创建需要被 Spring 托管的组件类,并使用适当的注解进行标注。常用的注解包括
@Component
、@Service
、@Repository
等。例如:@Component public class MyComponent { // ... }
-
在 Spring 配置文件 XML 配置文件中,启用组件扫描,以使 Spring 能够自动发现和注册带有注解的组件
XML 配置方式:<context:component-scan base-package="com.example" />
-
@Repository标识持久层组件
-
@Repository
注解是 Spring 框架提供的一种注解,用于标记一个类为数据访问层(DAO)组件。它是@Component
注解的特殊化,用于表示该类主要负责与数据库或其他持久化存储进行数据交互和访问的角色。 -
实例:
package com.mapper; import org.springframework.stereotype.Repository; @Repository("userMapper")//括号里的相当于id名字如果不给就是类名名字 首字母小写 public class SmsUserMapperImpl implements SmsUserMapper{ @Override public int insert(){ System.out.println("执行了新增方法"); return 0; } }
-
-
@Service
标识服务层组件-
@Service
注解通常与其他 Spring 注解一起使用,如@Autowired
用于自动注入依赖、@Qualifier
用于指定注入的具体实例等。使用@Service
注解的好处是简化了配置文件的编写,提高了代码的可读性和维护性。 -
示例:
package com.service; import com.mapper.SmsUserMapperImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("userService")//括号里的相当于id名字如果不给就是类名名字 首字母小写 public class UserServiceImpl implements UserService{ /** * 重复的new对象 构造注入 就是解决 Service 和dao 的问题 */ @Autowired //自动装配 构造 get set p命令注入 public SmsUserMapperImpl userMapper; @Override public int insert(){ return userMapper.insert(); } }
-
-
运行 Spring 容器: 在应用程序入口处,通过配置文件或注解方式创建 Spring 容器,并从容器中获取需要的组件。例如:
-
编写测试类
@Test public void testService(){ ApplicationContext context=newClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=(UserService)context.getBean("userService"); userService.insert(); } }
2.运行结果
-
通过以上详细步骤,就可以使用注解方式实现 Spring IOC,即由 Spring 容器负责创建、管理和注入对象,实现了控制反转和依赖注入的功能。在进行注解配置时,还可以结合其他注解(如 @Qualifier
、@Value
等)来进一步细化配置和处理特定的情况。确保配置了适当的组件扫描和正确的注解使用方式,以使 Spring 能够正确识别和处理注解。