Java教程

复习复习spring,来回顾下

本文主要是介绍复习复习spring,来回顾下,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

回顾spring的基本使用

俗话说:刀久了不用会生锈,同样知识久了也会生疏,本文就spring的基本使用做一个回顾。

概念

spring是一个轻量级控制反转(IoC)面向切面(AOP)的容器(框架)

IOC:即控制反转,指创建对象的控制权转移给Spring框架进行管理,并由Spring根据配置文件去创建实例和管理各个实例之间的依赖, 对象与对象之间松散耦合,也利于功能的复用。

AOP:即面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块。这个模块被命名为“切面’’,减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证,日志,事务管理。

优点

  • spring属于低侵入式设计,代码的污染性低
  • spring的DI机制将对象之间的依赖关系交由框架处理,减低组建的耦合度
  • spring对主流的应用框架提供了集成支持

使用

简单演示一下

  1. 创建springboot项目

  2. 假设dao下有这样一个接口:

    package com.lys.dao;
    
    public interface dbDao {
        void use();
    }
    

    并有两个实现上述接口的类:

    package com.lys.dao.dbimpl;
    
    import com.lys.dao.dbDao;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class OracleImpl implements dbDao {
        @Override
        public void use() {
            System.out.println("Oracle 数据库");
        }
    }
    
    package com.lys.dao.dbimpl;
    
    import com.lys.dao.dbDao;
    import org.springframework.stereotype.Repository;
    
    //自动默认的bean的名字是类名首字母小写
    @Repository("mysql")// 自定义bean的名字
    public class MySQLImpl implements dbDao {
        @Override
        public void use() {
            System.out.println("mysql 数据库");
        }
    }
    
  3. 实际使用中获取类的对象实例

    有多种方式获取,分别是通过自定义名称类名.class,或者默认的bean名称,如下;

    @SpringBootTest
    class Spring12ApplicationTests implements ApplicationContextAware {
        private ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext=applicationContext;
        }
    
        @Test
        public void test1(){
            //方式1:使用bean的自定义名称
            //MySQLImpl mySQL = (MySQLImpl) applicationContext.getBean("mysql");
    
            //方式2:使用bean的默认名称(即类名的首字母小写)
            //MySQLImpl mySQL = (MySQLImpl) applicationContext.getBean("mySQLImpl");
    
            //方式3:  使用类名.class指定bean类型
            MySQLImpl mySQL =applicationContext.getBean(MySQLImpl.class);
            mySQL.use();
        }
    }
    

4.其实获取bean对象的过程还可以进一步简化,通过@Autowired可以实现自动装配,上面的测试可以简化如下:

@SpringBootTest
class Spring12ApplicationTests implements ApplicationContextAware {
    @Autowired
    private MySQLImpl mySQLImpl;
    
    @Test
    public void test1(){
        mySQL.use();
    }
}

5.当要引用第三方库时如何注册bean呢?可以写一个配置类,加上注解@confuguration,标明这是一个特殊的类,在类中用@Bean可以自定义返回的Bean类型

举例:

package com.lys.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;

@Configuration
public class AlphaConfig {
    @Bean
    public SimpleDateFormat simpleDateFormat(){
        //这里注册一个时间格式化的bean实例
        return new SimpleDateFormat("yyyy-MM-dd");
    }
}

当需要时这样调用:

package com.lys;
import java.text.SimpleDateFormat;
import java.util.Date;

@SpringBootTest
class Spring12ApplicationTests implements ApplicationContextAware {
    @Autowired
    private SimpleDateFormat simpleDateFormat;

    @Test
    public void test3(){
        System.out.println(simpleDateFormat.format(new Date()));
    }
}

Spring常用注解

注解名称功能
@Controller标识该类是spring MVC controller处理器,用来创建http请求对象
@RestControlle@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@Service用于标记业务层组件
@Autowired写在字段上或者方法上,用来装配bean
@Repository用于标注数据访问组件,即Dao组件
@component当组件不好归类的时候,可以用此注解泛指组件
@Scope用来标识bean的作用域
@Qualifier当创建多个具有相同类型的bean时,可以使用@Qualifier和@Autowired注释使用哪一个真正的bean来装配,从而消除装配时可能遇到的混乱
@RequestMapping提供初步的请求映射信息
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上
等等
这篇关于复习复习spring,来回顾下的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!