Skip to content
This repository was archived by the owner on Apr 1, 2024. It is now read-only.

Commit c1f23b8

Browse files
author
zhaopengfei
committed
ioc dependency lookup
1 parent 9938a0c commit c1f23b8

File tree

10 files changed

+173
-0
lines changed

10 files changed

+173
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@
2121

2222
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
2323
hs_err_pid*
24+
25+
.idea/
26+
target/
27+
*.iml

spring-00-introduction/pom.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>me.erudev</groupId>
8+
<artifactId>spring-00-introduction</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
11+
<properties>
12+
<maven.compiler.source>8</maven.compiler.source>
13+
<maven.compiler.target>8</maven.compiler.target>
14+
</properties>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>javax.servlet</groupId>
19+
<artifactId>javax.servlet-api</artifactId>
20+
<version>3.1.0</version>
21+
</dependency>
22+
</dependencies>
23+
24+
</project>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package me.erudev.architecture.dao;
2+
3+
import java.util.List;
4+
5+
/**
6+
* @author pengfei.zhao
7+
* @date 2021/4/29 16:18
8+
*/
9+
public interface DemoDao {
10+
List<String> findAll();
11+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.erudev.architecture.dao.impl;
2+
3+
import me.erudev.architecture.dao.DemoDao;
4+
5+
import java.util.Arrays;
6+
import java.util.List;
7+
8+
/**
9+
* @author pengfei.zhao
10+
* @date 2021/4/29 16:18
11+
*/
12+
public class DemoDaoImpl implements DemoDao {
13+
14+
15+
@Override
16+
public List<String> findAll() {
17+
return Arrays.asList("aaa", "bbb", "ccc");
18+
}
19+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package me.erudev.architecture.factory;
2+
3+
import java.io.IOException;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
import java.util.Properties;
7+
8+
/**
9+
* @author pengfei.zhao
10+
* @date 2021/4/29 16:34
11+
*/
12+
public class BeanFactory {
13+
private static Properties properties;
14+
15+
private static Map<String, Object> cachedMap = new HashMap<>();
16+
17+
static {
18+
properties = new Properties();
19+
try {
20+
properties.load(BeanFactory.class.getClassLoader().getResourceAsStream("factory.properties"));
21+
} catch (IOException e) {
22+
throw new ExceptionInInitializerError("BeanFactory initialize error:" + e.getMessage());
23+
}
24+
}
25+
26+
public static Object getBean(String beanName) {
27+
if (!cachedMap.containsKey(beanName)) {
28+
synchronized (BeanFactory.class) {
29+
if (!cachedMap.containsKey(beanName)) {
30+
try {
31+
Class clazz = Class.forName(properties.getProperty(beanName));
32+
Object obj = clazz.newInstance();
33+
cachedMap.put(beanName, obj);
34+
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
35+
e.printStackTrace();
36+
}
37+
}
38+
}
39+
}
40+
return cachedMap.get(beanName);
41+
}
42+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* @author pengfei.zhao
3+
* @date 2021/4/29 16:01
4+
*/
5+
package me.erudev.architecture;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package me.erudev.architecture.service;
2+
3+
import java.util.List;
4+
5+
/**
6+
* @author pengfei.zhao
7+
* @date 2021/4/29 16:18
8+
*/
9+
public interface DemoService {
10+
11+
List<String> findAll();
12+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package me.erudev.architecture.service.impl;
2+
3+
import me.erudev.architecture.dao.DemoDao;
4+
import me.erudev.architecture.factory.BeanFactory;
5+
import me.erudev.architecture.service.DemoService;
6+
7+
import java.util.List;
8+
9+
/**
10+
* @author pengfei.zhao
11+
* @date 2021/4/29 16:19
12+
*/
13+
public class DemoServiceImpl implements DemoService {
14+
15+
DemoDao demoDao = (DemoDao) BeanFactory.getBean("demoDao");
16+
17+
public DemoServiceImpl() throws ClassNotFoundException {
18+
for (int i = 0; i < 10; i++) {
19+
DemoDao demoDao = (DemoDao)BeanFactory.getBean("demoDao");
20+
System.out.println(demoDao);
21+
}
22+
}
23+
24+
@Override
25+
public List<String> findAll() {
26+
return demoDao.findAll();
27+
}
28+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package me.erudev.architecture.servlet;
2+
3+
import me.erudev.architecture.dao.DemoDao;
4+
import me.erudev.architecture.factory.BeanFactory;
5+
6+
import javax.servlet.ServletException;
7+
import javax.servlet.annotation.WebServlet;
8+
import javax.servlet.http.HttpServlet;
9+
import javax.servlet.http.HttpServletRequest;
10+
import javax.servlet.http.HttpServletResponse;
11+
import java.io.IOException;
12+
13+
/**
14+
* @author pengfei.zhao
15+
* @date 2021/4/29 16:22
16+
*/
17+
@WebServlet(urlPatterns = "/demo")
18+
public class DemoServlet extends HttpServlet {
19+
20+
DemoDao demoDao = (DemoDao) BeanFactory.getBean("demoDao");
21+
22+
@Override
23+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
24+
resp.getWriter().println(demoDao.findAll().toString());
25+
}
26+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
demoDao=me.erudev.architecture.dao.impl.DemoDaoImpl
2+
demoService=me.erudev.architecture.service.impl.DemoServiceImpl

0 commit comments

Comments
 (0)