Bootstrap

Spring框架入门

大家好呀,我是WIKW。今天是学习maven的第三天,我们学习了基于maven的Spring框架,下面呢就是今天学习的一些笔记和案例,分享给大家。

一、Spring概述
           1、Spring框架是企业使用最多的框架,没有之一。

            2、Spring是一站式框架,也就是Spring可以整合其他框架。

                  a、Spring IoC :对象工厂及依赖注入。

                  b、Spring AOP:面向切面编程技术,Spring 事务管理的基础。

                  c、Spring Transaction management :Spring 事务管理。

                  d、Spring Web MVC :强大而灵活的web框架

二、Spring IoC 入门
           2.1 什么是IoC
              1、IoC是Inversion of Control 的缩写, 即 “控制反转”。

                      控制反转:将创建对象的权利,由自己(new)反转给Spring 。(自己理解的意思)

              2、IoC 作用:解决对象之间的耦合

           2 .2 入门案例:基础案例

              2.2.1:maven环境

                  导入坐标:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <!-- 事务 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>


        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>3.7.5</version>
        </dependency>

        <!--整合-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!-- mvc json -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.2</version>
        </dependency>

        <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>


        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

        <!--jsp相关-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--整合日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.10</version>
        </dependency>



    </dependencies>

          2.2.2 需求:使用Ioc方式创建UserService对象,并调用查询所有的方法。

          2.2.3步骤:

                     1、编写功能接口及实现类。使用@Component将实现类添加到Spring容器。

                     2、编写配置类,并扫描实现类。使用@Configuration声明配置类,使用@ComponentScan扫描。

                     3、编写测试类。使用ApplicationContext从spring容器中获取实现类。

         2.2.3实现:

                   1、UserService接口:

​
public interface UserService {
    void selectAll();
}

​

                 2、UserService实现类:

​
@Component("userService1") //放入spring容器
public class UserServiceImpl implements UserService {
    @Override
    public void selectAll() {
        System.out.println("demo01 userService");
    }
}

​

                3、配置类Demo01configuration:

@Configuration  //配置类
@ComponentScan(basePackages = "com.czxy.demo01.service") //扫描需要被加载的类所在的包
public class ConfigDemo01 {
}

               4、测试类

public class TextDemo01IoC {
    public static void main(String[] args) {
        //1、通过处理注解   获得工厂
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigDemo01.class);
        //2、通过工厂获得mapper
        UserService userSerive = (UserService) applicationContext.getBean("userService1");
        //3、调用
        userSerive.selectAll();
    }
}

            2.2.4 总结:

                   1、配置类必须使用@Configuration进行声明

                   2、@Component扫描的是service的包名。

      2.3 入门案例:依赖注入

           2.3.1步骤:

                  1、编写UserDao,并使用@Component

                  2、编写UserService,并使用@Component

                  3、修改UserService,提供UserDao成员变量,并使用@Resource完成注入

                  4、编写配置类,使用@ComponentScan扫描(service、dao)

                  5、测试类

           2.3.2实现:     

                  1、编写UserDao,并使用@Component

@Component("userDao2")
public class UserDao {
    public void selectAll(){
        System.out.println("demo02 UserDao selectAll");
    }
}

                  2、编写UserService,并使用@Component

                  3、修改UserService,提供UserDao成员变量,并使用@Resource完成注入

@Component("userService2")
public class UserService {
    @Resource(name = "userDao2")  //从spring IoC 容器中获取对象
    private UserDao userDao;
    public void selectAll(){
        userDao.selectAll();
        System.out.println("demo02 userService");
    }
}

                  4、编写配置类,使用@ComponentScan扫描(service、dao)

@Configuration
@ComponentScan(basePackages = {"com.czxy.demo02_DI.dao","com.czxy.demo02_DI.service"})
public class Demo02Configuration {
}

                 5、测试类

public class Text02 {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Demo02Configuration.class);
        UserService userService = applicationContext.getBean("userService2",UserService.class);
        userService.selectAll();
    }
}

          3:Ioc详情

          3.1 Bean创建

               3.1.0 Bean相关注解

               

注解描述

@Component

将修饰的资源交予spring管理。 value属性:为资源命名(唯一标识)

@Controller

衍生注解,与@Component作用和属性相同。特用于修饰表示层的资源。

@Service

衍生注解,与@Component作用和属性相同。特用于修饰业务逻辑层的资源。

@Repository

衍生注解,与@Component作用和属性相同。特用于修饰数据访问层的资源。

               3.1.1 需求:使用基本结构,编写查询所有学生

               3.1.2步骤:

                      1、编写StudentDao接口及方法

                      2、编写StudentDao实现类:StudentDaoImpl

                      3、编写StudentService接口及方法

                      4、编写StudentService实现类:StudentServiceImpl

                      5、编写配置类 :Demo03Configuration

                      6、编写测试类

               3.1.3实现:

                      1、编写StudentDao接口及方法

public interface StudentDao {
    void selectAll();
}

                      2、编写UserDao实现类:StudentDaoImpl

@Repository("studentDao")
public class StudentDaoImpl implements StudentDao {
    @Override
    public void selectAll() {
        System.out.println("demo04 repository");
    }
}

                      3、编写StudentService接口及方法

public interface StudentService {
    void selectAll();
}

                      4、编写StudentService实现类:StudentServiceImpl

@Service("studentService")
public class StudentServiceImpl implements StudentService {

    @Resource(name = "studentDao")
    private StudentDao studentDao;
    @Override
    public void selectAll() {
        System.out.println("demo04 service");
        studentDao.selectAll();
    }
}

                      5、编写配置类 :Demo03Configuration

@Configuration
@ComponentScan(basePackages = {"com.czxy.demo03_Component.dao","com.czxy.demo03_Component.service", "com.czxy.demo03_Component.controller"})
public class Demo03Configuration {
}

                      6、编写测试类

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo04Configuration.class)

public class TestDemo03 {
    @Resource(name = "studentController")
    private StudentController studentController;

    @Test
    public void run(){
        studentController.selectAll();
    }
}
;