Random random = new Random();
public class UserMapper {
public void insert() {
// 向数据表中的“用户表”中插入数据
}
}
public class UserController {
public UserMapper userMapper;
public void reg() {
userMapper.insert();
}
}
public class UserController {
public UserMapper userMapper = new UserMapper();
public void reg() {
userMapper.insert();
}
}
## 2. 创建基于Spring的工程
<dependencies>
</dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.14</version>
</dependency>
## 3. 通过Spring创建对象--通过@Bean方法
**演示案例:spring01**
package cn.tedu.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Random;
@Configuration
public class SpringBeanFactory {
@Bean
public Random random() {
return new Random();
}
}
接下来,创建某个类用于执行:
public class SpringRunner {
public static void main(String[] args) {
// 1. 加载Spring
AnnotationConfigApplicationContext ac
= new AnnotationConfigApplicationContext(SpringBeanFactory.class);
// 2. 从Spring中获取对象
Random random = (Random) ac.getBean("random");
// 3. 测试使用对象,以便于观察是否获取到了有效的对象
System.out.println("random > " + random);
System.out.println("random.nextInt() > " + random.nextInt());
// 4. 关闭
ac.close();
}
}
## 4. 通过Spring创建对象--组件扫描
``java
AnnotationConfigApplicationContext ac
= new AnnotationConfigApplicationContext("cn.tedu.spring");
```
- 调用`getBean()`时,传入的名称是将`UserMapper`类的名称的首字母改为小写,即:
```java
UserMapper userMapper = ac.getBean("userMapper", UserMapper.class);
```
package cn.tedu.spring;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("cn.tedu.spring")
//在使用`@ComponentScan`时,也可以传入多个包名,
@ComponentScan({"cn.tedu.spring.controller", "cn.tedu.spring.service"})
public class SpringConfig {
// 以下是加载Spring的代码片段
AnnotationConfigApplicationContext ac
= new AnnotationConfigApplicationContext(SpringConfig.class);
}
package cn.tedu.spring;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class UserMapper {
public UserMapper() {
System.out.println("\tUserMapper.UserMapper()");
}
@PostConstruct
public void init() {
System.out.println("\tUserMapper.init()");
}
@PreDestroy
public void destroy() {
System.out.println("\tUserMapper.destroy()");
}
}
**SpringConfig.java**
package cn.tedu.spring;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("cn.tedu.spring")
public class SpringConfig {
}
**UserMapper.java**
package cn.tedu.spring;
import org.springframework.stereotype.Repository;
@Repository
public class UserMapper {
public void insert() {
System.out.println("UserMapper.insert() >> 将用户数据写入到数据库中……");
}
}
**UserController.java**
package cn.tedu.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
@Autowired // 注意:此处使用了自动装配的注解
private UserMapper userMapper;
public void reg() {
System.out.println("UserController.reg() >> 控制器即将执行用户注册……");
userMapper.insert();
}
}
**SpringRunner.java**
package cn.tedu.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringRunner {
public static void main(String[] args) {
// 1. 加载Spring
AnnotationConfigApplicationContext ac
= new AnnotationConfigApplicationContext(SpringConfig.class);
// 2. 从Spring中获取对象
UserController userController
= ac.getBean("userController", UserController.class);
// 3. 测试使用对象,以便于观察是否获取到了有效的对象
userController.reg();
// 4. 关闭
ac.close();
}
}
关于`@Autowired`的装配机制:
## 10. 关于Spring框架的小结
本文转载chengheng老师,若版权侵犯,请及时联系本人