0
点赞
收藏
分享

微信扫一扫

#Spring Framework

诗与泡面 2022-04-14 阅读 56
java
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老师,若版权侵犯,请及时联系本人

举报

相关推荐

0 条评论