Spring day1

Spring框架

Spring框架是一个开源的Java企业级应用程序开发框架。它提供了一套全面的基础设施,用于开发Java应用程序的各个层面,包括Web应用、数据库、事务、安全、远程调用等。Spring框架的目标是简化企业级应用程序的开发,提高开发效率,并且具有良好的可维护性和可测试性。

Spring框架的核心特点包括:

  1. 控制反转(Inversion of Control,IoC):Spring使用依赖注入(Dependency Injection,DI)的方式,将对象的创建和依赖关系的管理交给容器来完成,这种设计模式称为控制反转。

  2. 面向切面编程(Aspect-Oriented Programming,AOP):Spring通过AOP实现了对横切关注点(如日志、事务、安全等)的模块化支持,将这些关注点与核心业务逻辑分离,提高了代码的可维护性和可重用性。

  3. 组件化:Spring框架使用组件化的方式进行开发,通过将应用程序划分为不同的模块(如控制器、服务、数据访问等),使得系统更加灵活和易于扩展。

  4. 简化开发:Spring提供了丰富的功能和工具,简化了开发任务,如自动装配、模板引擎、数据访问模块等,大大提高了开发效率。

除了核心模块外,Spring框架还提供了很多扩展模块,包括Spring MVC用于开发Web应用程序、Spring Data用于简化数据库访问、Spring Security用于提供安全认证和授权等。

总之,Spring框架是一个功能强大、灵活易用的Java开发框架,广泛应用于企业级应用程序的开发。它的设计理念是促进代码的松耦合、可维护性和可扩展性,提高开发效率,降低开发成本。

IOC核心功能入门

OC(Inversion of Control)是Spring框架的核心功能之一,它通过将对象的创建和依赖关系的管理交给容器来完成,实现了控制反转的设计模式。下面是IOC的核心功能和入门操作:

  1. 容器:IOC容器是Spring框架的核心,它负责管理对象的生命周期和依赖关系。Spring提供了两种类型的容器:BeanFactory和ApplicationContext。BeanFactory是IOC容器的基本实现,它在需要的时候才创建对象;ApplicationContext是BeanFactory的子接口,它提供了更多的功能和特性,如自动装配、国际化支持、事件发布等。

  2. 配置:在使用IOC容器之前,需要对容器进行配置。Spring提供了多种配置方式,包括XML配置、注解配置和Java配置。XML配置是最常见的方式,通过定义bean和它们的依赖关系来配置IOC容器;注解配置使用注解来标记和管理对象,使配置更加简洁;Java配置使用纯Java代码来配置容器,可以更加灵活地进行配置。

  3. Bean定义:在IOC容器中,对象被称为Bean。在配置文件中,需要通过Bean定义来描述对象的类型、属性和依赖关系。Bean定义可以通过XML配置文件的方式定义,也可以使用注解或Java配置来定义。

  4. 依赖注入:依赖注入是IOC的核心机制,它通过容器自动将对象的依赖关系注入到对象中。有三种常见的依赖注入方式:构造器注入、setter方法注入和字段注入。构造器注入是通过在构造器中接收依赖的对象来完成注入;setter方法注入是通过setter方法设置依赖的对象;字段注入是直接将依赖的对象赋值给字段。Spring会根据配置文件中的依赖关系,自动完成依赖注入。

  5. 生命周期管理:IOC容器负责管理Bean的生命周期。在Bean的创建和销毁过程中,容器可以执行一些特定的回调方法,例如初始化方法和销毁方法。通过配置文件或注解,可以指定Bean的初始化方法和销毁方法,容器会在适当的时机调用这些方法。

通过理解和应用以上核心功能,可以开始使用IOC容器来管理对象的创建和依赖关系。可以根据实际需求选择合适的配置方式,并且学习依赖注入的不同方式。逐步熟悉IOC容器的使用,可以加深对Spring框架的理解和应用能力。

引入spring的约束,需要先找到具体的约束头信息

 spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
    具体的约束
        <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">
        </beans>

完成UserService的配置

 <bean id="userService" class="my.demo2.UserServiceImpl"/>

采用Spring框架的工厂方式来获取到UserService接口的具体实现类

public void q() {
            //创建工厂,加载核心配置文件 
            ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            //从工厂当中获取到对象
            UserService us =  (UserService) ac.getBean("userService");
            //调用对象的方法执行
            us.sayHello();
        }

控制反转(IoC):

IoC是一种软件设计原则,它反转了传统的控制流程。在传统的编程模型中,开发者通常需要显式地控制对象的创建和生命周期管理。而在IoC中,控制对象的创建和管理被转移到了框架或容器中,开发者只需要描述对象之间的关系,框架会负责根据配置和规则来管理对象的生命周期和依赖关系。

依赖注入(DI):

依赖注入是IoC的一种实现方式,它是指将一个对象的依赖关系从代码中解耦出来,通过外部来提供这些依赖。通过依赖注入,对象不再主动创建或管理它所依赖的对象,而是被动地接收这些依赖。这可以通过构造方法、属性、方法参数等方式来实现。

在Spring框架中,IoC和DI是核心概念。Spring的IoC容器负责管理Bean的创建、销毁和依赖关系,开发者只需要定义Bean之间的关系和依赖,容器会负责按照配置来实现这些关系。通过依赖注入,Spring可以在对象被创建时自动将它所依赖的其他对象注入进来,从而实现了对象之间的松耦合。

构造方法注入(Constructor Injection): 通过构造方法来注入依赖。在XML配置文件中,使用 <constructor-arg> 元素来指定构造方法的参数。

<!-- XML配置文件 -->
<bean id="dependency" class="com.example.Dependency" />
<bean id="targetClass" class="com.example.TargetClass">
    <constructor-arg ref="dependency" />
</bean>


属性注入(Property Injection): 通过属性来注入依赖。在XML配置文件中,使用 <property> 元素来指定属性的值。

<!-- XML配置文件 -->
 <bean id="dependency" class="com.example.Dependency" />
 <bean id="targetClass" class="com.example.TargetClass">
 <property name="dependency" ref="dependency" /> </bean>


方法注入(Method Injection): 通过方法来注入依赖。在XML配置文件中,使用 <property> 元素来指定方法的参数。

<!-- XML配置文件 --> 
<bean id="dependency" class="com.example.Dependency" /> 
<bean id="targetClass" class="com.example.TargetClass">
 <property name="dependency" ref="dependency" /> </bean>


接口注入(Interface Injection): 在类实现某个接口时,通过接口方法来注入依赖。

public interface DependencyInjector {
             void injectDependency(Dependency dependency); 
                                                        } 
public class TargetClass implements DependencyInjector {
             private Dependency dependency; @Override public void injectDependency(Dependency dependency) { this.dependency = dependency; 
}
 // ... }

AOP的关键概念包括:

切面(Aspect):切面是一个模块,它封装了一个或多个横切关注点。一个切面包括了切点、通知和其他的配置。

切点(Pointcut):切点定义了在何处应用切面的逻辑。它指定了在目标代码中哪些地方会触发切面的行为。

通知(Advice):通知是切面的具体行为。它定义了在切点处执行的逻辑,可以是在切点之前、之后、环绕等不同的时机执行。

连接点(Join Point):连接点是在应用程序中可能触发切面行为的所有点。例如,方法调用、异常抛出等。

织入(Weaving):织入是将切面应用到目标代码中的过程。它可以在编译时、加载时或运行时进行。

AOP增强处理类型及特点:

前置通知(Before Advice): 前置通知在目标方法执行之前执行。它通常用于执行一些前置的准备工作,如安全性检查、参数验证等。

后置通知(After Returning Advice): 后置通知在目标方法成功执行后执行。它可以用于执行一些后置清理工作,如资源释放、日志记录等。

异常通知(After Throwing Advice): 异常通知在目标方法抛出异常后执行。它可以用于处理异常情况,如记录异常信息、进行补偿操作等。

环绕通知(Around Advice): 环绕通知是最强大的通知类型,它可以完全控制目标方法的执行。它在目标方法之前和之后都执行,可以决定是否继续执行目标方法、修改输入参数、修改返回值等。

最终通知(After Finally Advice): 最终通知在目标方法执行后(无论成功与否)执行。它通常用于释放资源、清理工作等
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值