Spring IOC
1. Spring
spring是一个开源的Java企业级应用开发框架,用于简化Java企业级应用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力。
作用:
降低耦合,简化开发。Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。
AOP编程的支持。Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
声明式事务的支持。只需要通过配置就可以完成对事务的管理,而无需手动编程。
方便程序的测试。Spring对Junit4支持,可以通过注解方便的测试Spring程序。
方便集成各种优秀框架。Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、Mybatis、Quartz等)的直接支持。
降低JavaEE API的使用难度。Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。
2. Spring IOC
IoC(Inversion of Control,控制反转)是Spring框架的一个核心思想,实现了将类实例化的时机以及细节交给Spring来管理。
2.1 IOC的核心概念
- 使用对象时候由主动new对象转换成由外部提供对象,此过程中对象的创建权由程序转移到外部,这种思想叫做控制反转
- Spring技术对此提供的实现
- Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的外部
- IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean。
2.2 IOC的实现方式
- DI-依赖注入
在容器中建立bean与bean之间的依赖关系的整个过程叫做依赖注入,即所依赖的属性和对象都由外部传递,而非自己创建。
3. Spring Bean
Spring Bean 是 Spring 框架中的核心概念之一。在 Spring 框架中,Bean 是由 Spring 容器创建并管理的对象。这些对象由 Spring 容器实例化、配置和组装,并且由 Spring 管理其生命周期。
Bean 是构成Spring应用的基本单元,可以是任何Spring IOC容器管理的对象
3.1 Bean的实例化方式
-
使用构造函数: 通过调用类的构造函数来创建Bean实例。这可以通过XML配置或注解来实现。
@Bean public MyBean myBean() { return new MyBean(); }
-
使用静态工厂方法: 如果Bean的实例化逻辑位于一个静态工厂方法中,可以通过指定工厂方法来创建Bean。
@Bean public MyBean myBean() { return MyBeanFactory.createMyBean(); }
-
使用实例工厂方法: 如果实例化逻辑位于一个非静态的工厂方法中,可以通过指定实例工厂方法来创建Bean。
@Bean public MyBean myBean(MyBeanFactory factory) { return factory.createMyBean(); }
-
使用
@Bean
注解: 在Java配置类中,可以使用@Bean
注解来声明一个Bean。@Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } }
-
使用
@Component
注解: 通过在类上使用@Component
注解,Spring会自动扫描并注册该类为Bean。@Component public class MyBean { // ... }
-
使用
@Autowired
注解: 在构造函数、字段或setter方法上使用@Autowired
注解,Spring会注入依赖的Bean。@Component public class MyBean { private final DependencyBean dependencyBean; @Autowired public MyBean(DependencyBean dependencyBean) { this.dependencyBean = dependencyBean; } }
3.2 Bean的属性注入方式
-
构造函数注入: 通过构造函数参数来注入依赖的Bean。(有参构造、无参构造)
@Component public class MyBean { private final DependencyBean dependencyBean; @Autowired public MyBean(DependencyBean dependencyBean) { this.dependencyBean = dependencyBean; } }
-
Setter方法注入: 通过Setter方法来注入依赖的Bean。
@Component public class MyBean { private DependencyBean dependencyBean; @Autowired public void setDependencyBean(DependencyBean dependencyBean) { this.dependencyBean = dependencyBean; } }
4. Spring注解管理
-
@Component
: 将类标识为一个Spring管理的Bean。 -
@Service
: 通常用于服务层的类,是@Component
的特化。 -
@Repository
: 通常用于数据访问层的类,是@Component
的特化。 -
@Controller
: 通常用于表现层的类,是@Component
的特化。 -
@Configuration
: 用于定义配置类,可以替代传统的XML配置文件。 -
@Bean
: 在配置类中使用,用于声明一个Bean。 -
@Value
: 用于注入外部配置的值,如来自properties文件的值。 -
@Autowired
: 用于自动注入依赖的Bean。 -
@Qualifier
: 当有多个相同类型的Bean时,用于指定注入哪一个。 -
@Lazy
: 用于延迟加载Bean。 -
@Scope
: 用于指定Bean的作用域。 -
@PostConstruct
: 用于在Bean创建后执行初始化代码。 -
@PreDestroy
: 用于在Bean销毁前执行清理代码。 -
@Resource
: 用于按名称自动注入Bean。 -
@Inject
: 用于自动注入Bean,是JSR-330标准。 -
@Profile
: 用于指定Bean在哪个或哪些环境下创建。 -
@DependsOn
: 用于指定Bean初始化的依赖顺序。 -
@Primary
: 当有多个Bean符合注入条件时,用于指定优先注入哪一个。 -
@Lookup
: 用于在Bean中执行自定义的方法查找逻辑。 -
@RequestScope
: 用于创建每个HTTP请求一个实例的Bean。 -
@SessionScope
: 用于创建每个HTTP会话一个实例的Bean。 -
@ApplicationScope
: 用于创建整个应用程序一个实例的Bean。 -
@TaskScope
: 用于创建每个异步任务一个实例的Bean。 -
@Transactional
: 用于声明事务管理。 -
@Cacheable
: 用于声明方法的结果是可缓存的。 -
@CachePut
: 用于声明方法的结果更新缓存。 -
@CacheEvict
: 用于声明方法的调用应该使缓存失效。 -
@EnableAutoConfiguration
: 用于告诉Spring Boot根据添加的jar依赖自动配置项目。 -
@SpringBootApplication
: 组合了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
。 -
@RestController
: 组合了@Controller
和@ResponseBody
。 -
@RequestMapping
: 用于将HTTP请求映射到处理器方法。 -
@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
: 用于简化HTTP请求映射,分别对应HTTP的GET、POST、PUT、DELETE方法。 -
@PathVariable
、@RequestParam
、@RequestBody
、@RequestHeader
: 用于从HTTP请求中提取信息。 -
@ResponseBody
: 用于将控制器方法的返回值作为HTTP响应的正文。 -
@RequestBody
: 用于将HTTP请求正文绑定到方法参数。 -
@EnableCaching
: 用于开启基于注解的缓存管理功能。 -
@EnableAspectJAutoProxy
: 用于开启AspectJ的自动代理功能。 -
@EnableTransactionManagement
: 用于开启基于注解的声明式事务管理。
原文地址:https://blog.csdn.net/weixin_63314150/article/details/142690485
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!