当前位置: 首页 > news >正文

spring学习总结(一)_Ioc基础(下)

本篇文章继续上篇文章讲解Ioc基础,这篇文章主要介绍零配置实现ioc,现在相信大家项目中也基本都是没有了xml配置文件。废话不多说。一起学习

代码示例

  • BookDao.java
package com.kevin.spring.demo1.dao;

/**
 * 图书数据访问接口
 */
public interface BookDao {

    /**
     * 添加图书
     *
     * @param bookName
     * @return
     */
    String addBook(String bookName);
}
  • BookDaoImpl.java
/**
 * 接口实现类
 */
@Repository
public class BookDaoImpl implements BookDao {
    /**
     * 添加图书接口
     *
     * @param bookName
     * @return
     */
    public String addBook(String bookName) {
        return "添加图书《" + bookName + "》成功";
    }
}
  • BookService.java
@Service
public class BookService {
    @Resource
    BookDaoImpl bookDao;

    public void storeBook(String bookName){
        String result = bookDao.addBook(bookName);
        System.out.println(result);
    }

}
  • User.java
package com.kevin.spring.demo1.entity;

import org.springframework.stereotype.Component;

@Component
public class User {

    public User() {
        System.out.println("创建User对象");
    }

    public User(String msg) {
        System.out.println("创建User对象" + msg);
    }

    public void show() {
        System.out.println("一个学生对象!");
    }
}
  • ApplicationConfig.java
package com.kevin.spring.demo1.config;

import com.kevin.spring.demo1.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.kevin.spring.demo1")
public class ApplicationConfig {

    @Bean
    public User getUser(){
        return new User("成功");
    }
}

测试类

    @org.junit.Test
    public void testBook(){
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
        BookService bookService = ctx.getBean(BookService.class);
        bookService.storeBook("周杰伦");
        User user = ctx.getBean("getUser",User.class);
        user.show();
    }

运行结果

创建User对象
创建User对象成功
添加图书《周杰伦》成功
一个学生对象!

@Configuration

@Configuration 相当于配置文件中的<beans/>

@ComponentScan

@ComponentScan相当于配置文件中的context:component-scan

@Bean

@Bean相当于<bean/>,只能注解在方法和注解上,一般在方法上使用
方法名相当于id

这里注意上面获取user时用的是getUser,因为方法名相当于id

@Value获取properties配置

  • 新建一个dev.properties文件
boy.name = kevin
boy.age = 20
  • BoyUtil.java
package com.kevin.spring.demo1.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:dev.properties")
public class BoyUtil {

    @Value("${boy.name}")
    private String name;
    @Value("${boy.age}")
    private String age;

    @Override
    public String toString() {
        return "BoyUtil{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
    //get和set方法省略
}

测试

    @org.junit.Test
    public void testBoyUtil(){
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
        BoyUtil boyUtil = ctx.getBean(BoyUtil.class);
        System.out.println(boyUtil);
    }

输出结果

创建User对象
创建User对象成功
BoyUtil{name='kevin', age='20'}

好了,springIoc基础就暂时告一段落。玩的开心
代码:https://github.com/runzhenghengbin/spring-study
参考:https://www.cnblogs.com/best/p/5727935.html#_label3

相关文章:

  • 联邦法官驳回章莹颖案被告所有动议 全案按原计划审理
  • MySQL逻辑架构及性能优化原理
  • mysql 查询的时候没有区分大小写的解决方案
  • 2.python数据类型
  • [译] 讨论 JS ⚡:文档
  • 利用pyecharts做地图数据展示
  • 文件的上传和下载
  • 拼图(九宫格,十六宫格)
  • 机械手相机9点坐标标定-基于C#+EmguCV
  • java 之 运算符
  • php简单实现MVC
  • 旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图
  • alias别名
  • Android Studio 3.2更能减少占用量!App Bundle缩减APK 64%大小
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ----------
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [译]前端离线指南(上)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【React系列】如何构建React应用程序
  • canvas 绘制双线技巧
  • HomeBrew常规使用教程
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Python3爬取英雄联盟英雄皮肤大图
  • win10下安装mysql5.7
  • 爱情 北京女病人
  • 对JS继承的一点思考
  • 缓存与缓冲
  • 今年的LC3大会没了?
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 面试总结JavaScript篇
  • 排序算法学习笔记
  • 七牛云假注销小指南
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 应用生命周期终极 DevOps 工具包
  • 源码安装memcached和php memcache扩展
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​什么是bug?bug的源头在哪里?
  • # Maven错误Error executing Maven
  • #QT(智能家居界面-界面切换)
  • (70min)字节暑假实习二面(已挂)
  • (C++)八皇后问题
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (四)Linux Shell编程——输入输出重定向
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)Sublime Text3配置Lua运行环境
  • .NET Core 中插件式开发实现
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 依赖注入和配置系统
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表