栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

复习复习spring,来回顾下

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

复习复习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用于将请求参数区数据映射到功能处理方法的参数上
等等
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号