在idea中spring的相关配置内容

spring框架:为了简化服务器开发,使现有技术更加容易使用,本身使一个大杂烩。

开源免费的容器、轻量级、非入侵式框架

控制反转IOC  面向切面编程AOP

支持事务初级,对框架整合的支持

SSH:struct2+Spring+Hibernate

SSM:SpirngMvc+Spring+Mybatis

SpringBoot

一个快速开发的脚手架,快速的开发单个微服务

SpringCloud

基于SpringBoot实现的

大多数公司都在使用SpringBoot,学习SpringBoot前提,完全掌握Spring、SpringMvc

配置

 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.3.13</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.3.13</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.3.13</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.13</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.12</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.13</version>
        </dependency>

控制反转是一种通过描述(xml或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入。

id : 是bean的唯一标识符,相当于对象名

class : bean对象所对应的全限定名

name : 就是别名,可以取多个别名

构造器注入,set方式注入,依赖注入

普通值注入 使用value

Bean注入,(其他类)使用ref

//数据类型注入方式   

  <bean id="user" class="com.controller.pojo.User" scope="singleton">

<!--        普通set注入-->
        <property name="id" value="111111"/>

<!--        数组等注入  ref-->
        <property name="address">
            <array>
                <value>123546</value>
            </array>
        </property>

<!--        list 注入-->
        <property name="list">
            <list>
                <value>111111,22222</value>
            </list>
        </property>
<!--        map注入-->
        <property name="map">
            <map>
                <entry key="0" value="000"></entry>
                <entry key="1" value="111"></entry>
            </map>
        </property>

    </bean>

bean的作用域

scope: singleton 单例模式(spring默认机制)  、 property 原型模式(每次从容器中get都会产生一个新对象) 

自动装配:

byName:根据名称(名称肯定都是唯一)

byType:根据类型(但是必须类型唯一)

//根据名称查找
<bean id="user" class="com.controller.pojo.User" autowire="byName">
<!--        普通set注入-->
        <property name="id" value="111111"/>

    </bean>

注解实现自动装配  

在成员变量上使用Autowired注解

在构造器上使用Autowired注解:

在普通方法上加Autowired注解:方法会在项目启动时,实现一次

可以在构造器的入参上加Autowired注解:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
">

<!--    开启注解支持-->
    <context:annotation-config />

@Autowired 注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

按照Autowired默认的装配方式:byType,是无法解决找个多个对象问题(单例模式),这时可以改用按名称装配:byName。

  1. @Autowired

  2.     @Qualifier("user1")

  3.     private User user;

  4. Qualifier意思是合格者,一般跟Autowired配合使用,需要指定一个bean的名称,通过bean名称就能找到需要装配的bean。

当我们使用自动配置的方式装配Bean时,如果这个Bean有多个候选者,假如其中一个候选者具有@Primary注解修饰,该候选者会被选中,作为自动配置的值。

@Resource默认按byName自动注入。
既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。
只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。
只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

 

属性注入

@Value("1111")
public void setName(String name) {
    this.name = name;
}

@Component有几个衍生的注解 在web开发中 将mvc三层架构分层

dao  @Repository

service  @Service

controller   @Controller 

将某个类注解到spring中 装配bean

xml用来管理bean

注解用来注入bean

代理模式  SpringAOP的底层 springaop  springmvc

静态代理: 

抽象角色  :使用接口或者抽象类

public interface Rent {
    public void rent();

}

真实角色 :被代理的角色

//房东
public class Host implements Rent {

    @Override
    public void rent() {
        System.out.println("房东租房.....");
    }
}

代理角色 :代理真实角色

//代理角色也要帮房东租房子
public class Proxy  implements Rent{

    private Host host;



    public Proxy(Host host) {
        this.host = host;
    }

    public Proxy() {
    }

    @Override
    public void rent() {
        seeHouse();
        host.rent();
        fare();
    }

    //看房
    public void seeHouse(){
        System.out.println("中介带看房");
    }

    //收中介费
    public  void fare(){
        System.out.println("中介收费");
    }

}

客户:访问代理对象的人

public class Client {
    public static void main(String[] args) {
        //房东要租房
        Host host = new Host();

        //代理 中介帮房东租房子  代理角色有一些附属操作
        Proxy proxy = new Proxy(host);
        proxy.rent();

    }

}

好处:可以使真实角色的操作更加纯粹,不用关注一些公共业务,公共业务交给代理角色,公共业务发生变化可以集中处理

动态代理:

动态代理代理类是自动生成的

基于接口动态代理   JDK动态代理

基于类的动态代理   cglib代理

Java字节码  javasist

Aop  提供声明式事务 允许用户自定义切面

横切关注点:跨越应用程序多个模块的方法或功能,

切面:横切关注点 被模块化的 特殊对象 是一个类

通知:切面必须要完成的工作 是类中的一个方法

目标:被通知对象

代理:想目标对象应用通知之后创建的对象

切入点:切面通知执行的地点的定义

连接点:与切入点匹配的执行点

使用原生的Spring API 接口

配置AOP

<!--          使用原生spring API接口-->
<!--          配置aop-->
 <aop:config >
<!--切入点:expression 表达式 execution(  要执行的位置 ) -->
<aop:pointcut id="pointcut" expression="execution(* com.controller.service.UserServiceImpl.*(..))"/>

<!--执行环绕增强-->
     <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
      <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>
  </aop:config>

自定义类实现aop  

需要开启注解支持

  <!--方式三-->
        <bean id="anno" class="com.controller.DIY.AnnotationPoinCut"/>
<!--        开启注解支持-->
        <aop:aspectj-autoproxy/>

回顾事务:把一组业务当成一个业务

要么都成功  要么都失败

ACID原则

.原子性

.一致性

.隔离性  多个业务可能操作同一个资源 防止数据损坏

.持久性  事务一旦提交,无论系统发生什么问题,结果都不会在被影响,被持久化的写道存储器中

事务管理分为

声明式事务:AOP

编程式事务:在代码中进行事务的配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值