Spring两大特性:IOC控制反转、AOP面向切面编程。
- IOC:控制反转,把创建对象的过程交给 Spring 进行管理(DI:依赖注入,在IoC容器内将有依赖关系的bean进行关系绑定。成员变量有两种注入方式:set注入、构造方法注入)。
- AOP:面向切面编程,在不动源代码的基础上对代码进行增强。他利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为“Aspect”,即切面,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并利用于未来的可操作性和可维护性。
- aop使用场景:如权限认证、日志、事务等等
在项目中,注入spring容器中bean对象时,均可使用@Resource。
目前IDEA不推荐使用@Autowried,原因:@Autowried是spring提供的,并非是Java标准,而@Resource是Java标准定义的,推荐使用。
如果想使用@Autowried的话,建议通过构造器注入(成员字段上用final修饰不需要加注解,类上添加@RequiredArgsConstructor注解)。
在Spring中,默认情况下,bean的注入方式是使用构造器注入(Constructor Injection)。意味着,当Spring创建新的bean实例时,它会调用一个构造函数,并将依赖关系作为参数传递给该构造函数。
虽然构造函数注入是默认的首选方式,但Spring也允许使用Setter方法注入或字段注入,具体取决于您的需求和项目的配置。如果构造函数不存在或未标记为@Autowired,则会尝试使用Setter方法注入或字段注入方式。
方式1:字段注入(在初始化bean时,底层通过反射为属性赋值)
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
}
方式2:构造函数注入
@Service
public class UserService {
private final UserMapper userMapper;
@Autowired
public UserService(UserMapper userMappe) {
this.userMappe = userMappe;
}
}
简化写法:
@Service
@RequiredArgsConstructor //lombok提供
public class UserService {
private final UserMapper userMapper;
}
方式3:setter方式注入
@Service
public class UserService {
private UserMapper userMapper;
@Autowired
public void setRepository( UserMapper userMapper) {
this.userMappe = userMappe;
}
}