您的位置:首页 > 娱乐 > 明星 > spring框架搭建

spring框架搭建

2024/10/5 20:21:58 来源:https://blog.csdn.net/2301_78564613/article/details/141648614  浏览:    关键词:spring框架搭建

1.spring是什么?

spring是一个轻量级的IOC和AOP的一站式java开发框架,

简化企业级开发

⭕轻量级

框架体积小(核心模块)

IOC

(Inversion of Control)控制反转,把创建对象的控制权,反转给spring框架

 ⭕AOP

(Aspect Oriented Programming)面向切面编程,

将我们程序中一些公共的非业务代码分离提取出来,然后在我们业务代码执行时,给他们横切进来.

使用的动态代理的机制实现,在我们的业务代码,不显示的调用,但是执行业务代码,会通过代理对象,调用非业务代码

 ⭕一站式

除了核心的IOC和AOP功能之外,还对数据访问层web层都有封装,所以是一站式的

2.spring 搭建

在prom.xml导入maven spring核心jar包

 <!-- spring-context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency>

在spring.xml配置spring配置文件 

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="user" class="com.ff.spring.model.User"> </bean></beans>

到这里一个简单的springHelloWord就搭好了,后面还有许多组件用到,会陆续导入到spring中

我们可以创建一个Admin 类来测试一下,看一下搭建的成果

 这是Admin类

public class Admin {private String account;private String password;public Admin(String account, String password) {this.account = account;this.password = password;}public Admin() {}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Admin{" +"account='" + account + '\'' +", password='" + password + '\'' +'}';}
}

测试类

package com.ffyc.springpro.test;import com.ffyc.springpro.model.Admin;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class test1 {public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Admin admin = (Admin)applicationContext.getBean("admin");Admin admin1 = applicationContext.getBean("admin",Admin.class);System.out.println(admin);System.out.println(admin1);}
}

 ClassPathXmlApplicationContext是spring框架中的一个具体的实现类,负责生成管理程序中的对象 可以看作是一个容器,所以一般把spring框架也称为spring容器,或着IOC容器 new ClassPathXmlApplicationContext("spring.xml");

getBean("admin");从spring框架(容器)中获取到需要的对象

 到这里Adinm对象已经不需要我们去new了,spring框架已经可以帮我们创建对象

3.IOC(控制反转) 

控制反转:

        (一种编程思想) 把生成对象的控制权反转给spring框架,spring框架负责管理对象的整个生命过程 对外提供获取对象的方法,我们在程序中哪里需要使用,在哪里获取即可

         IOC 容器负责对象的实例化、对象的初始化,对象和对象之间依赖关系、 对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来 控制。

         我们需要使用的对象都由ioc容器进行管理,不需要我们去手动通过new 的方式去创建对象,由ioc容器直接帮我们组装好,当我们需要使用的时候直 接从ioc容器中直接获取就可以了。

正控:若要使用某个对象,需要自己去负责对象的创建

反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象, 不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架. 

 

4.string bean管理

string bean管理有两种方式: 

        1.基于xml配置方式

        2.基于注解配置方式

依赖注入 

在spring配置文件中注册需要管理的类 使用bean标签,配置需要spring管理的类 
id="对象名称,可以在getBean中获得spring生成的对象" class="需要让spring管理的类的地址" scope="singleton" 单例的(默认) 在spring框架启动时,创建对象,而且始终只创建一个对象 scope="prototype" 原型的(多例的) 在每次获得对象时,创建一个新的对象 IOC指的是让spring框架创建对象,创建对象的同时,还有一个动作称为依赖注入依赖注入:在创建对象的时候,为对象中属性赋值 
依赖注入有两种方法: 1.通过属性注入,属性的set方法 2.通过构造方法注入

基于xml配置方式依赖注入

 

上图就是一个简单的基于xml配置方式进行依赖注入,将Admin,Admindao,Adminservice这三个类交给spring管理,在 Adminservice 中定义成员变量Admindao,就可以通过Adminservice 调用Admindao中的方法,

 

 

基于注解方式依赖注入

开启注解扫描

 <context:component-scan base-package="包名"> </context:component-scan>

注册创建对象

@Component

 

@Repository 

 

@Service 

 

以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不 同的注解标记 

@Scope(value=“prototype”) 原型

@Scope(value=“ singleton ”) 单例 

注解方式依赖注入【DI:DependencyInjection】

@Autowired 

@Autowired 是Spring 提供的注解,可以写在字段和setter方法上。如果写在 字段上,那么就不需要再写setter方法。默认情况下它要求依赖对象必须存在, 如果允许null值,可以设置它的required属性为false。 

 

spring 注解方式bean管理  自动注入
@Autowired  是spring框架提供的注解
    用于属性和属性的set方法上, 如果写在属性上,set方法都可以不需要
    默认要注入的值不能为空, required = true
    自动注入有两种值的匹配方式
     1.通过属性的类型查找 @Autowired
     2.通过对象的名字查找 @Qualifier(value = "adminDao")
   @Resource 是Java语言中提供的注解标签
        也是添加在属性上的,不需要添加set方法,
        注入的值也是不能为空,
        也可以通过类型来查找  @Resource
        也可以通过对象的名字来查找   @Resource(name = "adminDao")
 

 注解与xml的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。

注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。

xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重 启服务器即可将新的配置加载。

xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。

5.Spring 数据访问层管理 

Spring 是个一站式框架:Spring 自身也提供了web层的 SpringWeb 和 持 久层的 SpringJdbcTemplate。

开发步骤

 下载Spring jdbc数据访问层jar包

<!-- spring-jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version></dependency><!--阿里数据源--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

 导入属性文件

<context:property-placeholderlocation="config.properties"/>

 管理数据源对象

spring管理数据库链接对象 本次采用阿里巴巴数据库连接管理对象 

<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><propertyname="driverClassName"value=""></property><propertyname="url"value=""></property><propertyname="username"value=""></property><propertyname="password"value=""></property><propertyname="initialSize"value="10"></property><!--初始化连接数量--><propertyname="maxActive"value="20"></property><!--最大连接数量--></bean>
<!--配置spring中对jdbc进行封装的操作类  JdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="druidSource"></property></bean>

这样在adminDao 中就可以多数据库进行操作,不过现在已经很少用jdbc对数据库操做,接下我们会写spring对mybatis集成,通过mybatis对数据库进行操作

 

6.spring集成mybatis

导入mybatis jar包 

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>

 配置sqlSessionFactory

<!-- spring管理生成SqlsessionFactory对象 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidSource"></property><!--注入数据源--><property name="configLocation"  value="classpath:mybatis.xml"></property><!--配置mybatis配置文件--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"></property><!--扫描mapper映射文件--></bean>

指定生成接口代理 

 <!--生成dao包下所有接口的代理对象--><bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.ffyc.ssm.dao"></property><!--指定接口所在的包--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>

在service 中注入Dao代理接口,此接口有Spring代理实现 

 

 这样就mybatis集成到spring框架里

7.AOP

AOP:

面向切面编程:是对面向对象编程的补充延续

面向切面编程思想是将程序中非业务代码(提交事务,打印日志,权限验证,统一异常处理)提取分离出来,然后在调用业务代码时,通过代理对象帮助我我们调用这些提取出来的非业务代码,这样在业务代码不用显示的调用非业务代码,做到了业务代码和非业务代码的分离,降低了耦合度.

好处:模块之间的耦合度降低

原理:动态代理模式 给业务代码生成代理对象

AOP编程思想是java中的,不是spring专有的

连接点: 类中可以背增强的方法

切入点: 类中有很多方法可以被增强,哪些方法被增强了,哪些方法就叫做切入点

通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通 知分为方法执行前通知,方法执行后通知,环绕通知等.

目标: 代理目标对象(连接点和切入点所在的类)

代理: 向目标对象应用通知时创建的代理对象

AOP配置过程:

1.导入jar

<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.2.RELEASE</version></dependency>

2.spring.xml添加配置开启注解

<aop:aspectj-autoproxy/>

3.应用

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com