首先对于我们来说Spring是什么,Spring可以让我们对刚开始写项目时,有一个明确的框架结构,用比较专业的话来讲,就是使用IOC和AOP,即Inversion of control控制反转和Aspect Oriented Programming面向切面编程,总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。
学习IOC的组成结构:
- Dao 接口
- DaoImpl 接口实现类
- service 业务接口
- ServiceImpl 业务实现类
使用IOC的好处在,对象的创建本来由程序自己控制,后面变成了交给用户来自己控制
他是一种编程思想,由主动的编程变成被动的接收
private UserDao userDao; //利用set进行动态实现值的注入 public void setUserDao(UserDao userDao){ this.userDao = userDao; }
接下来看一个实例:
//服务类
public interface MessageService { void sendMessage(String message); } //服务接口类 public class EmailService implements MessageService { @Override public void sendMessage(String message) { System.out.println("Email sent: " + message); } }
原本的传统编程代码
public class MyApplication { public static void main(String[] args) { MessageService service = new EmailService(); service.sendMessage("Hello, world!"); } }
现在使用Spring的IOC容器来管理对象的创建和依赖关系
首先声明EmailService的bean
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="messageService" class="com.example.EmailService" /> </beans>
然后,我们就可以使用Spring的IOC容器来获取EmailService对象,并调用其方法
public class MyApplication { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MessageService service = (MessageService) context.getBean("messageService"); service.sendMessage("Hello, world!"); } }
MyApplication
类不再负责直接创建 EmailService
对象,而是通过 Spring 的 IOC 容器通过bean来获取对象。通过这种方式,对象的创建和依赖关系被外部容器管理,实现了IOC控制反转。如果以后要更改使用的消息服务,只需要修改 Spring 配置XML文件,而不需要修改 MyApplication
类的代码,实现解耦合。
但是我们一般直接使用@Configuration
和 @Bean
注解来替代 XML 配置文件。
@Configuration
注解用于标识一个 Java 类为 Spring 的配置类,而 @Bean
注解用于声明一个方法为一个 Spring 管理的 bean。
接下来看看使用注解的例子:
@Configuration public class AppConfig { @Bean public UserService userService() { return new UserService(userDao()); } @Bean public UserDao userDao() { return new UserDao(); } }
-
@Configuration
注解告诉 Spring 这个类是一个配置类,Spring 将会在启动时读取这个类,并根据其中的配置来创建和管理 bean。 -
@Bean
注解告诉 Spring 这个方法将返回一个 bean,并且这个 bean 将会被 Spring 管理。在AppConfig
类中,我们声明了两个方法并用@Bean
注解标记它们,分别是userService()
和userDao()
。-
userService()
方法返回一个UserService
对象,并且这个对象需要一个UserDao
对象作为构造函数的参数。Spring 将会自动调用userDao()
方法来获取UserDao
对象,并传递给UserService
的构造函数,从而创建UserService
的实例。 -
userDao()
方法返回一个UserDao
对象。因为我们在userService()
方法中引用了userDao()
方法,Spring 将会先创建UserDao
的 bean,然后再创建UserService
的 bean,确保UserService
能够获取到正确的UserDao
实例。
-
优点:
-
松耦合和可维护性:使用
@Configuration
和@Bean
注解可以将应用程序的配置信息集中在一个或多个配置类中,而不是分散在多个 XML 文件中。这样做可以使得应用程序的组件之间的依赖关系更加清晰,代码结构更加模块化,易于理解和维护。 -
依赖注入:Spring 框架提供了强大的依赖注入机制,可以自动将依赖的对象注入到需要的地方。在上面的例子中,
UserService
类需要一个UserDao
对象来执行数据库操作,通过@Bean
注解声明UserDao
的 bean,Spring 将会自动创建UserDao
的实例,并将它注入到UserService
中。这种依赖注入的方式可以减少代码的耦合度,使得组件之间的关系更加灵活。
标签:UserDao,回顾,Spring,知识,bean,UserService,userDao,public From: https://www.cnblogs.com/1764782550-rzs/p/18060757