Spring注入(Dependency Injection,简称DI)是一种设计模式,用于实现控制反转(IoC),它允许将对象的创建、配置和管理交给容器来完成,从而降低代码之间的耦合度,提高代码的可维护性和可测试性,在Spring框架中,主要有三种注入方式:构造器注入、Setter方法注入和基于注解的注入。
1、构造器注入
构造器注入是最常见的一种注入方式,通过在类的构造函数中传入依赖对象来实现依赖注入,这种方式简单易用,但缺点是无法实现多态和动态绑定。
示例代码:
public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
}
2、Setter方法注入
Setter方法注入是通过在类的setter方法中设置依赖对象来实现依赖注入,这种方式可以实现多态和动态绑定,但代码相对繁琐。
示例代码:
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
3、基于注解的注入
基于注解的注入是Spring框架提供的一种高级注入方式,通过在类或属性上添加注解来实现依赖注入,这种方式既可以实现多态和动态绑定,又具有较好的可读性。
示例代码:
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
}
1、需要在项目中引入Spring相关的依赖,如spring-context等。
2、在配置文件中开启注解扫描,以便扫描到自定义的注解和实现类,在XML配置文件中添加如下配置:
<context:component-scan base-package="com.example" />
3、在需要注入的类或属性上添加相应的注解,如@Service、@Autowired等。
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
}
4、在Spring容器中获取注入的对象,可以通过ApplicationContext接口的getBean方法获取:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) context.getBean("userService");
1、如何实现单例模式?
答:可以通过在配置文件中设置scope为singleton来实现单例模式,或者在类上添加@Scope("singleton")注解。
@Component("userService")
@Scope("singleton")
public class UserServiceImpl implements UserService { ... }