需求介绍-Spring入门

主要是理解IOC,理解容器和Bean

代码

Test里面利用getBean方法帮助我们看一下容器的创建:

那我首先要写一个Bean对象,假设是写一个访问数据库类。

AlphaDaointerface)类型:

package com.nowcoder.community.dao;

public interface AlphaDao {
String select();
}

然后写两个类实现这个接口体验利用容器好处:

AlphaDaoHibernatelmpl

package com.nowcoder.community.dao;
import org.springframework.stereotype.Repository;

@Repository("AlphaHibernate")
public class AlphaDaoHibernateImpl implements AlphaDao {
@Override
public String select() {
return "Hibernate";
}
}

AlphaDaoMybatisImpl

package com.nowcoder.community.dao;

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;

@Repository
@Primary // 具有更高优先级
public class AlphaDaoMyBatisImpl implements AlphaDao{
@Override
public String select() {
return "MyBatis";
}
}

这个时候就有两个Bean对象,可以通过容器管理了。

其次呢,Spring容器还可以管理bean的声明周期,实现一些业务逻辑,那我们重新再写一个Bean

AlphaService

package com.nowcoder.community.service;

import com.nowcoder.community.dao.AlphaDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; @Service
@Scope //("prototype"):表示Bean实例有多个,每次get就实例化一个。默认单例。
public class AlphaService { @Autowired
private AlphaDao alphaDao;
//被Spring容器管理的bean只被实例化一次,因为它是单例的
public AlphaService() {
System.out.println("实例化AlphaService");
}
//初始化在构造器之后
@PostConstruct
public void init() {
System.out.println("初始化AlphaService");
}
//销毁之前调用,释放某些资源
@PreDestroy
public void destroy() {
System.out.println("销毁AlphaService");
} public String find() {
return alphaDao.select();
} }

上面我们都是自己写的Bean,但是有的时候我们希望能在容器中加载一个第三方的Bean

那我们就需要自己写一个配置类,在配置类中通过Bean注解进行申明,那么就开始写一个配置类。

所有第三方的都写在config这个包里面:

AlphaConfig

package com.nowcoder.community.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.text.SimpleDateFormat; //配置类,加载第三方的bean
@Configuration
public class AlphaConfig {
@Bean
public SimpleDateFormat simpleDateFormat() {//方法名就是bean的名字
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); }
}

 

但是这种都是自己去主动去获取,我们其实可以通过依赖注入来实现。

在使用之前进行申明就可以了,使用这个@Autowired注解。

上面都是bean声明,下面就是一个具体的测试的方法了。

CommunityApplicationTests

package com.nowcoder.community;

import com.nowcoder.community.dao.AlphaDao;
import com.nowcoder.community.service.AlphaService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import java.text.SimpleDateFormat;
import java.util.Date; @RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
class CommunityApplicationTests implements ApplicationContextAware {
private ApplicationContext applicationContext; @Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Test
public void testApplicationContext() {
System.out.println(applicationContext);
AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);
System.out.println(alphaDao.select()); alphaDao = applicationContext.getBean("AlphaHibernate", AlphaDao.class);
System.out.println(alphaDao.select());
} @Test
public void testBeanManagement() {
AlphaService alphaService = applicationContext.getBean(AlphaService.class);
System.out.println(alphaService);
} @Test
public void testBeanConfig() {
SimpleDateFormat simpleDateFormat = applicationContext.getBean(SimpleDateFormat.class);
System.out.println(simpleDateFormat.format(new Date()));
} @Autowired
@Qualifier("AlphaHibernate")// 加载特指的Bean
private AlphaDao alphaDao; @Autowired
private AlphaService alphaService; @Autowired
private SimpleDateFormat simpleDateFormat; // 测试依赖注入
@Test
public void testDI() {
System.out.println(alphaDao);
System.out.println(alphaService);
System.out.println(simpleDateFormat);
}
}

  

最新文章

  1. Civil 3D API二次开发学习指南
  2. 解决内网主机ping不通网关能ping内网
  3. 处理字符串-String类和正则表达式
  4. spark
  5. JavaScript进阶(二)
  6. libevent库1.4升级到2.0时无法flush的解决办法
  7. SpringMVC 接收复杂对象
  8. xls与csv文件区别?
  9. Microsoft Visio 2010 怎样把直线,虚线与箭头之间切换
  10. redis 字符串
  11. 苹果新贵 Swift 之前世今生
  12. wait event & wake up
  13. C# ref与out关键字解析
  14. 写给笨蛋徒弟的学习手册(3)—C#中15个预定义数据类型
  15. Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**
  16. tensorflow实现RNN及Word2Vec
  17. Java学习笔记(十六):this关键字
  18. Cartographer源码阅读(3):程序逻辑结构
  19. Logo的制作
  20. POJ2728 Desert King

热门文章

  1. 【转载】CentOS-yum安装Docker环境
  2. NSDate小结
  3. Android单元测试问题解决
  4. java基础---java8 新特性
  5. Django 接口自动化测试平台
  6. ASP.NET C# 打包再修改aspx文件报错解决方案
  7. Tutorial_6 运行结果
  8. C++:第一个c++程序
  9. CentOS下 Django部署 uWSGI+Django(一)
  10. POJ1934 Trip 题解