Spring介绍

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring介绍相关的知识,希望对你有一定的参考价值。

介绍


Spring中AOP、IOC等点

IOC介绍

Spring核心思想之一:IOC(Inversion Of Control)控制反转
对象创建交给外部容器完成,这个过程就是控制反转

在之前java使用中,需要使用那个类的对象,在调用方直接New 对象出来,然后完成调用


class User {
    //User类中用到UserInfo,需要在那个类中创建出对象实例
UserInfo uderinfo =   new UserInfo();
     getUserInfo(){
       //todo
         
     } 
    
    updateUserInfo{
      //todo
    }
}

class UserInfo{
   String name;
   Intterger ID;
   String address;
    
    //getter和setter方法
    

}



对象创建交给外部容器完成,这个过程就是控制反转
对于类的创建及销毁等生命周期内的操作都交给容器管理,对象创建也是在容器中,如果调用方需要使用某一个对象,由IOC容器将对象的使用权交给了调用方,调用方只需要关注使用即可,对于对象的回收、创建都不在关注
解耦合!!!
Spring容器管理对象
1、添加依赖
通过maven来管理依赖jar包

Spring容器管理对象

1、添加依赖

通过maven来管理依赖jar包

        <!--Spring 基本核心jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <!--log4j日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--注解相关jar包-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

2、配置spring配置文件(applicationCintext.xml)

<?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/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    
</beans>

3、创建实体类

public class StudentGX21 {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4、spring来管理容器

在之前 new StudentGY21()创建对象
现在有了IOC容器,将该类讲给IOC容器帮助管理

    <!--通过bean节点来创建对象,id属性标识对象,class属性是对应类的全路径-->
    <bean id="student"  class="com.tulun.bean.StudentGX21"/>

5、通过容器获取对象

        //获取IOC容器对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentGX21 student = (StudentGX21)applicationContext.getBean("student");
        System.out.println(student);


先通过读取xml配置文件
对象xml进行解析
通过反射创建bean对象

Spring中DI介绍

DI-Dependency Injection:即依赖注入,将bean的依赖关系由容器来运行决定的,即容器动态的将某个依赖关系注入到组件中

对于依赖注入的使用
以StudentGX21为例,对其属性id和name完成注入

public class StudentGX21 {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

依赖注入如下:

    <!--通过set方法完成注入-->
    <bean id="student"  class="com.tulun.bean.StudentGX21">
        <!--name属性注入-->
        <property name="name" value="工业实训"/>
        <property name="id" value="计算机学院"/>
    </bean>

Spring中bean实例和依赖注入基于注解形式使用

xml配置文件如下:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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">

</beans> 

开启注解扫描

    <!--开启注解扫描,指定包路径或者类名:会扫描类、方法、属性上是否有注解-->
    <context:component-scan base-package="com.tulun"/>

在需要交给容器管理的类上添加注解

@Component(value = "student")
//<bean id="student"  class="com.tulun.bean.StudentGX21">
public class StudentGX21 {
    @Value("1")
    private String id;
    @Value("工业大学")
    private String name;
    @ Resource
    private   UserGX12 user;
}

在类上添加的注解是进行bean实例化的注解:
@Component
@Repository
@Controller
@Service
可以互相替换使用

依赖注入相关注解:
@Value:对于普通类型的属性
@ Resource :注入对象类型
@Autowired:注入对象类型

spring和mybatis的整合

整合思路
将SQLSessionFactory等创建交给Spring管理,
将mybatis的数据源、mapper的映射关系都可以交给spring管理
整合步骤

1、引入依赖

除了mybatis、spring依赖外,特定的依赖是mybatis提供专门和spring整合的依赖jar包

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

所有的依赖

        <!--Spring 基本核心jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <!--log4j日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--注解相关jar包-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

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

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

2、创建mybatis相关依赖信息

pojo\\mapper.xml\\mapper.java\\全局配置文件
全局配置文件(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--数据源及映射都可以不配置,放在spring配置文件中-->
</configuration>

pojo类

public class StudentGX21 {
    private Integer SID;
    private String Sname;
    private String Ssex;
    private Integer Sage;
    //省略getter和setter方法
}

mapper.java接口文件

public interface StudentMapperGX21 {
    public List<StudentGX21> getAllStudent();
}

mapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:命令空间 为对应的接口文件的全路径-->
<mapper namespace="com.tulun.mapper.StudentMapperGX21">

       <select id="getAllStudent" resultType="com.tulun.bean.StudentGX21">
        select * from student
    </select>
</mapper>

3、spring的配置文件(applicationContext1.xml)

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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">

    <!--开启注解扫描,指定包路径或者类名:会扫描类、方法、属性上是否有注解-->
    <context:component-scan base-package="com.tulun"/>

    <!--配置数据源:c3p0数据源-->
    <bean id="datasource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!--会话工厂的配置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--加载mybatis的配置文件-->
        <property name="configLocation" value="mybatis-config.xml"/>
        <!--配置数据源-->
        <property name="dataSource" ref="datasource"/>
        <!--配置映射文件-->
        <property name="mapperLocations" value="mapper/*.xml"/>
    </bean>


    <!--动态代理对象-->
    <bean class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--接口-->
        <property name="mapperInterface" value="com.tulun.mapper.StudentMapperGX21"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
</beans>

4、service层(StudentServce.java

//通过注解形式将该类交给spring管理
@Service(value = "studentService")
public class StudentServiceGX21 {
//    注入依赖:注入mapper层依赖
    @Autowired
    private StudentMapperGX21 studentMapperGX21;

    public void allStudents() {
        List <StudentGX21> studentGX21s = studentMapperGX21.getAllStudent();
        Iterator <StudentGX21> iterator = studentGX21s.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

5

以上是关于Spring介绍的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

Android课程---Android Studio使用小技巧:提取方法代码片段