计算机视觉技术 阿里云 regex serialization wso2 vue学习教程 java后台框架 click事件 jquery循环遍历 mac安装hadoop mysql重新初始化 arduino程序 cmd查看mysql版本 idea中svn的使用 python开发安卓应用 maya曲线建模 idea批量替换快捷键 小程序下拉刷新样式 matlab取实部 pyhton中异常和模块 mysql插入 python函数返回 javaobject java实例 javase教程 java中的基本数据类型 java学习平台 java中continue java取当前时间 php入门例子 骁龙435 id解锁大师 京东钱包客户端 ps出血 早早省 pr时间轴 万能低格工具还原u盘 黑客入门新手特训 mathcad 马颂德
当前位置: 首页 > 学习教程  > 编程语言

Spring框架复习

2020/10/8 19:10:38 文章标签:

1.spring核心概念复习 Spring两大核心:基于工厂模式IOC(DI)和基于动态代理AOP。 其中IOC(DI)是指控制器反转(依赖注入),原来要使用某个类对象实例是必须自己创建,使用s…

1.spring核心概念复习

Spring两大核心:基于工厂模式IOC(DI)和基于动态代理AOP。

其中IOC(DI)是指控制器反转(依赖注入),原来要使用某个类对象实例是必须自己创建,使用spring后就不需要自己创建,由spring创建,需要时直接从spring中获取并且有依赖关系是会spring会通过反射自动注入。

AOP就是不影响正常执行过程的前后加入额外的逻辑。比如权限,日志等,该执行的业务逻辑正常执行知识可以进行权限的判断核日志记录。

2.springXML编程-IOC

下面对ioc进行代码书写回顾:Classpathxml*applictionContext

导入项目所需的依赖

<dependencies>

    <!--单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <!--导入Spring的依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>

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

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

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>

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

    <!--框架日志工具-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>

    <!--Lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.8</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

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

    <bean id="myDate" class="java.util.Date"></bean>

</beans>

Spring的测试

package com.bruceliu.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Date;


public class TestSpringIoc {

    /**
     * 基于xml配置文件
     */
    @Test
    public void test() throws Exception {
        //通过xml初始化spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println(context.getBean(Date.class));

        //向获取spring中所有的bean的类型id
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }

}

3.spring注解编程-IOC

3.1. 引入

上面是通过配置文件的方式注册bean,其实现在spring提倡以注解驱动的方式实现bean的注册

3.2. 组件注册

3.2.1.配置类&Bean注解

@Configuration:加了这个注解的类就相当于传统的一个applicationContext-xxx.xml
@Bean:在标注了@Configuration的类里面的方式上面打上@bean就相当于在applicationContext-xxx.xml配置的一个<bean id=”userDao” class=”com.bruceliu.dao.UserDao”>
Dao的名字默认就是方法名,如果想改方法名使用@Bean(“beanName”)

//注解类==配置文件
@Configuration //告诉spring这是一个注解类
public class MainConfig {

    //相当于在xml中配置了<bean id="" class="com.bruceliu.dao.UserDao"><bean/>
    @Bean("userDao") //指定bean的名字
    public UserDao userDao01(){
        return new UserDaoImpl();
    }
}
public class MainConfigTest {

    @Test
    public void testIoc(){
        //1传统方式xml方式
        //ApplicationContext context = new ClassPathXmlApplicationContext(
        //          "applicationContext.xml");
        //UserDao userDao = context.getBean(UserDao.class);
        //System.out.println(userDao.loadUser(1L));


        //2 注解方式不需要配置文件,那bean怎么配置呢? 获取容器的时候原来制定配置文件,现在制定配置类
        ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
        UserDao userDao = context.getBean(UserDao.class);
        System.out.println(userDao.loadUser(1L));

        String[] beanNamesForType = context.getBeanNamesForType(UserDao.class);
        for (String beanName : beanNamesForType) {

            System.out.println(beanName);
        }

    }
}

3.2.3.@ComponentScan扫描bean

我们原来使用spring的使用不会在xml中一个一个配置bean,我们在再类上加上@Repository,@Service,@Controller @Component,并且注入时可以使用@AutoWired的注解注入。 这一切的功能都需要我们配置包扫描<context:component-scan base-package="com.bruceliu"/>.
然而现在注解驱动开发已经没有了配置文件,不能配置。但是提供了@ComponentScan,我们可以在配置类上面加上这个注解也是一样,并且也能扫描配置包项目的相关注解,也能完成自动注入。

接下来我们先来看扫描组件,后面再看注入

package com.bruceliu.service;

import com.bruceliu.bean.User;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    public User getUser(Long id){
        System.out.println("userservice...");
        return null;
    }
}
package com.bruceliu.controller;

import com.bruceliu.bean.User;
import org.springframework.stereotype.Controller;


@Controller
public class UserController {

    //先不拷贝页面,直接打印即可
    public User getUser(Long id){
        System.out.println("usercontroller...");
        return null;
    }
}
//注解类==配置文件
@Configuration //告诉spring这是一个注解类
@ComponentScan("com.bruceliu")
public class MainConfig {

    //相当于在xml中配置了<bean id="" class="com.bruceliu.dao.UserDao"><bean/>
    @Bean("userDao") //指定bean的名字
    public UserDao userDao01(){
        return new UserDaoImpl();
    }
}
public class MainConfigTest {

    @Test
    public void testIoc(){
        ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
        for (String beanName : context.getBeanDefinitionNames()) {
            System.out.println(beanName);
        }
    }

}

3.2.4.高级语法

package com.bruceliu.spring;

import com.bruceliu.dao.UserDao;
import com.bruceliu.dao.impl.UserDaoImpl;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;


//注解类==配置文件
//注解类==配置文件
@Configuration //告诉spring这是一个注解类
//@ComponentScan(value = "com.bruceliu")
//includeFilters = Filter[] 包含过滤器
//excludeFilters = Filter[] 排除过滤器
//useDefaultFilters = 使用默认过滤器
//多个扫描配置方法:使用ComponentScans
@ComponentScans(value = {
        @ComponentScan(value = "com.bruceliu",
        //excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class, Service.class})
                //关闭默认全部扫描includeFilters才能生效
        includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class}),useDefaultFilters = false
      )
})
public class MainConfig {

    //相当于在xml中配置了<bean id="" class="com.bruceliu.dao.UserDao"><bean/>
    @Bean("userDao") //指定bean的名字
    public UserDao userDao01() {
        return new UserDaoImpl();
    }
}
public class MainConfigTest {

    @Test
    public void testIoc(){
        ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
        for (String beanName : context.getBeanDefinitionNames()) {
            System.out.println(beanName);
        }
    }

}

注意1分开测试排除和包含
注意2:其他配置类影响-本身扫描也包含配置类


本文链接: http://www.dtmao.cc/news_show_250098.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?