Spring简单入门篇

Spring入门

什么是Spring?

  • Spring是一个非常活跃的开源框架,由Rod Johnson开发
  • 帮助分离项目组建之间的依赖关系
  • 主要目的是简化企业级开发

核心概念

  • IoC(Inversion of Control) 控制反转

    对象创建和对象关联从 程序员管理 变为 由spring容器管理

  • DI(Dependency Injection) 依赖注入

    对象和对象依赖关系的创建

  • AOP(Aspect Oriented Programming) 面向切面编程



Spring的组成

Spring模块组成

  1. 核心容器(Core Container)
  2. AOP(Aspect Oriented Programming)
  3. 设备支持(Instrument)
  4. 数据访问和集成(DataAccess/Integration)
  5. Web
  6. 报文发送(Messagin)
  7. Test


    在这里插入图片描述

GroupIdArtifactId说明
org.springframeworkspring-beans(重点)Beans 支持,包含 Groovy
org.springframeworkspring-aop(重点)基于代理的AOP支持
org.springframeworkspring-aspects(重点)基于AspectJ 的切面
org.springframeworkspring-context(重点)应用上下文运行时,包括调度和远程抽象
org.springframeworkspring-context-support支持将常见的第三方类库集成到 Spring 应用上下文
org.springframeworkspring-core(重点)其他模块所依赖的核心模块
org.springframeworkspring-expressionSpring 表达式语言,SpEL
org.springframeworkspring-instrumentJVM 引导的仪表(监测器)代理
org.springframeworkspring-instrument-tomcatTomcat 的仪表(监测器)代理
org.springframeworkspring-jdbc支持包括数据源设置和 JDBC 访问支持
org.springframeworkspring-jms支持包括发送/接收JMS消息的助手类
org.springframeworkspring-messaging对消息架构和协议的支持
org.springframeworkspring-orm(重点)对象/关系映射,包括对 JPA 和 Hibernate 的支持
org.springframeworkspring-oxm对象/XML 映射(Object/XML Mapping,OXM)
org.springframeworkspring-test单元测试和集成测试支持组件
org.springframeworkspring-tx(重点)事务基础组件,包括对 DAO 的支持及 JCA 的集成
org.springframeworkspring-web(重点)web支持包,包括客户端及web远程调用
org.springframeworkspring-webmvc(重点)REST web 服务及 web 应用的 MVC 实现
org.springframeworkspring-webmvc-portlet用于 Portlet 环境的MVC实现
org.springframeworkspring-websocketWebSocket 和 SockJS 实现,包括对 STOMP 的支持

Spring包依赖说明

  1. spring-core.jar:依赖commons-collections.jar,spring-core.jar。
  2. spring-beans.jar:依赖 spring-core.jar,cglib-nodep.jar
  3. spring-aop.jar:依赖spring-core.jar,spring-beans.jar,cglib-nodep.jar,aopalliance.jar
  4. spring-context.jar:依赖spring-core.jar,spring-beans.jar,spring-aop.jar,commons-collections.jar,aopalliance.jar
  5. spring-dao.jar:依赖spring-core.jar,spring-beans.jar,spring-aop.jar,spring-context.jar
  6. spring-jdbc.jar:依赖spring-core.jar,spring-beans.jar,spring-dao.jar
  7. spring-web.jar:依赖spring-core.jar,spring-beans.jar,spring-context.jar
  8. spring-webmvc.jar:依赖spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar
  9. spring -hibernate.jar:依赖spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-jdbc.jar,spring-orm.jar,spring-web.jar,spring-webmvc.jar
  10. spring-orm.jar:依赖spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-jdbc.jar,spring-web.jar,spring-webmvc.jar
  11. spring -remoting.jar:依赖spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-context.jar,spring-web.jar,spring-webmvc.jar
  12. spring-support.jar:依赖spring-core.jar,spring-beans.jar,spring-aop.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jar
  13. spring-mock.jar:依赖spring-core.jar,spring-beans.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jar

核心容器 Core Container
  • spring-core控制反战IoC(inversion of Control)与依赖注入DI(Dependency Injection)的基本实现。控制反转是种设计思想,即将你设计好的对象交给spring容器控制

  • spring-beansbean指代理对象。Bean工厂与bean的装配,BeanFactory接口使用控制反转对应用程序的配置、依赖性规范与实际的应用程序代码进行分离。

  • spring-context建立在core和beans基础上,提供框架式的访问方式。即IoC容器,它扩展了BeanFactory,为它添加了Bean生命周期管理、框架事件体系、资源加载透明化等功能,此外该模块还提供了很多企业级支持,如远程访问、任务调度等。ApplicationContext是该模块的核心接口,它扩展了BeanFactory,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。

  • spring-expression:spring表达式语言,Spring Expression Language(简称 SpEL )。支持运行时查询和操作对象图的表达式语言

spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()方法。我们一般都不直接用BeanFactory,而是用它的实现类ApplicationContext,这个类会自动解析我们配置的applicationContext.xml,然后根据我们配置的bean来new对象,将new好的对象放进一个Map中,键就是我们bean的id,值就是new的对象。



Core Container的基础用法
第一种 注解用法
  • 1、配置xml,在中配置spring需要用到的xml配置文件

        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.2.RELEASE</version>
            </dependency>
        </dependencies>
    
  • 2、使用spring后,可以不用亲自用new创建对象,只需要在需要创建的对象的类上加上@Component,然后在创建上述对象的类中加上@ComponentScan(用于扫描有@Component的类)。
    在这里插入图片描述
    在这里插入图片描述

不用配置类初始化spring容器时
在这里插入图片描述

用配置类初始化spring容器时

  1. 第一种用ComponentScan注解方式

在这里插入图片描述
在这里插入图片描述
2. 第二种用xml配置方式,不用@ComponentScan的情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3、初始化Spring容器,初始化注解Component修饰的类的构造,会自动创建Component修饰的类对象

    // 用本类初始化spring容器时
    ApplicationContext context = new AnnotationConfigApplicationContext(本类.class);
    
    // 用配置类初始化容器时,现在配置类上加@Configuraion和@ComponentScan,配置类可以什么都不写
    ApplicationContext context = new AnnotationConfigApplicationContext(配置类.class);
    
  • 4、获取Component修饰的类对象

    Object context.getBean(对象类.class)  
    
  • 5、调用对象



第二种 xml用法
  • 1、同上一中用法一相同

  • 2、在resources中new一个Xml Configuration File建一个配置文件,在xml文件中配置依赖关系

        <bean id="service>" class="com.qf.applicationcontextdemo.MessageService"></bean>
        <bean id="printer" class="com.qf.applicationcontextdemo.MessagePrinter">
            <property name="service" ref="service>"></property>
        </bean>
    
    • bean元素:描述当前对象需要由spring容器管理

      • id属性:标识对象(做标记),相当于key,在应用中可以根据id获取对象
      • class属性:被管理的类全名(全域名)
      • name属性:可用来存放url,与class配合使用时:是接收到name中url请求时,跳转到对应的class执行对应的方法。
    • property元素:描述该bean中标识的对象与ref中的对象的依赖关系,即当前类依赖于ref中的类

      • name属性:当前bean标识的类中定义的属性字段
      • ref属性:依赖的类的id(其他bean中的id)
  • 3、初始化spring容器,会自动创建类对象

    ApplicationContext context = new ClassPathXmlApplicationContext("上述配置的xml文件全域名");
    
  • 4、获取对象

    Object context.getBean(对象类.class)
    
  • 5、调用对象


注意点:

项目的可执行代码文件src中,有两个文件夹:main、test

  • main:spring项目代码。
  • test:单元测试文件夹,用于测试main文件夹中各个代码的方法

其中main文件夹有两个文件夹:java、resources

  • java.java文件的根目录,这里的java文件夹是所有spring项目中java文件的根目录
  • resources配置文件的根目录,因为resources是所有spring项目中配置文件的根目录,所以在ClassPathXmlApplicationContext("")中写的xml文件全域名只需要写其文件名,除非xml文件在resources的子文件夹中

使用的注解
  • 组建扫描

    • @Component:注释在需要创建对象的类上,spring上下文会自动扫描有Component的类来创建对象
    • @ComponentScan:注释在初始化spring容器的类上或定义的配置类上,扫描当前类所在的包中有@Component注解的类来创建对象
      • @ComponentScan("要扫描的包的全域名")
      • @ComponentScan(basePackageClasses = {要扫描的类.class,...})
      • @ComponentScan(basePackages = {要扫描的具体包,...})

  • 自动装配

    • @Autowired:自动装配,注释在建立依赖的构造函数(效率最高)、成员变量、set方法、普通方法上,交由spring容器管理,初始化spring容器时,自动调用该方法建立依赖(对象类需@Component注释)
    • @Primary:指定首选bean,当有两个实现类同时实现同一个接口时,如果不设置首选项,则会出现报错
    • @Qualifier :限定符,当没有@Primary时,可用此方法限定创建哪个实例。在@Component不指定id时,bean默认指定id为 首字母小写的类名

在这里插入图片描述

  • 定义配置类

    • @Configuration:定义配置的类,表示当前类是配置类(当主函数的类中没有(@ComponentScan时,可以用此方法)
  • 测试模块用的注解

    • @RunWith(SpringJUnit4ClassRunner.class):自动初始化上下文环境,相当于@ComponentScan
    • @ContextConfiguration(classes = 初始化spring类.class):读取配置文件注解
    • @Test:注释在测试方法上
  • 在对应的层上指定对应的注解

    • Dao层:@Repository
    • Service层:@Service
    • Controller层(Web层):@Controller



Spring原理浅析

Spring容器:通过HashMap<String,Object>来获取配置文件xml中的数据,通过xml解析技术,DOM等类来获取如下xml信息,如:

<bean id="user" class="com.qf.entity.User">
	<property ../>
</bean>

获取到对应的id和class之后,可通过反射来进行创建对象,实例化对象后继续执行方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值