问答平台(1),Spirng入门

Spring 全家桶

1
2
3
4
- Spring Framework(Spring的基石)
- Spring Boot(构建项目,方便开发)
- Spring Cloud(微服务,大项目拆分成若干个子项目再集成)
- Spring Cloud Data Flow

Spring Framework

1
2
3
4
5
6
7
8
- Spring Core
- IoC、AOP
- Spring Data Access
- Transactions、Spring MyBatis
- Web Servlet
- Spring MVC
- Integration
- Email、Scheduling、AMQP、Security

Spring IoC

1
2
3
4
5
6
- Inversion of Control 
- 控制反转,是一种面向对象编程的设计思想。
- Dependency Injection
- 依赖注入,是IoC思想的实现方式。
- IoC Container
- IoC容器,是实现依赖注入的关键,本质上是一个工厂。

Ioc 注解

1
2
3
4
5
语义上有区别
- @Repository
- @Service
- @Controller
- @Component

示例

理解IOC的概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// AlphaDao.java
public interface AlphaDao {

String select();
}

// AlphaDaoHibernateImpl.java
@Repository("alphaHibernate")
public class AlphaDaoHibernateImpl implements AlphaDao {

@Override
public String select() {
return "Hibernate";
}
}

// AlphaDaoMybatisImpl.java
@Repository
@Primary
public class AlphaDaoMybatisImpl implements AlphaDao {

@Override
public String select() {
return "Mybatis";
}
}

// CommunityApplicationTests.java
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public 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);

// Spring中的Bean默认单例模式
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")
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);
}
}

// AlphaService.java
@Service
//@Scope("prototype")
public class AlphaService {

@Autowired
private AlphaDao alphaDao;

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();
}
}

// AlphaConfig.java
@Configuration
public class AlphaConfig {

@Bean
public SimpleDateFormat simpleDateFormat() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
}

// AlphaController.java
@Controller
@RequestMapping("/alpha")
public class AlphaController {

@Autowired
private AlphaService alphaService;

@RequestMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello Spring Boot.";
}

@RequestMapping("/data")
@ResponseBody
public String getData() {
return alphaService.find();
}
}

参考资料


问答平台(1),Spirng入门
https://lcf163.github.io/2020/04/11/问答平台(1),Spirng入门/
作者
乘风的小站
发布于
2020年4月11日
许可协议