SpringBoot开发二
2024-10-19 10:25:47
需求介绍-Spring入门
主要是理解IOC
,理解容器和Bean
代码
在Test
里面利用getBean
方法帮助我们看一下容器的创建:
那我首先要写一个Bean
对象,假设是写一个访问数据库类。
AlphaDao
(interface
)类型:
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);
}
}
最新文章
- Civil 3D API二次开发学习指南
- 解决内网主机ping不通网关能ping内网
- 处理字符串-String类和正则表达式
- spark
- JavaScript进阶(二)
- libevent库1.4升级到2.0时无法flush的解决办法
- SpringMVC 接收复杂对象
- xls与csv文件区别?
- Microsoft Visio 2010 怎样把直线,虚线与箭头之间切换
- redis 字符串
- 苹果新贵 Swift 之前世今生
- wait event &; wake up
- C# ref与out关键字解析
- 写给笨蛋徒弟的学习手册(3)—C#中15个预定义数据类型
- Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**
- tensorflow实现RNN及Word2Vec
- Java学习笔记(十六):this关键字
- Cartographer源码阅读(3):程序逻辑结构
- Logo的制作
- POJ2728 Desert King