spring 的java配置方式

2018-08-10  本文已影响0人  cccccttttyyy

1. spring 1.x时代

通过xml配置bean

2. spring 2.x时代

支持注解
应用基本配置用xml 如:数据源 资源文件
业务开发用注解如: service注入bean

3. spring 3.x到4.x

开始提供java配置方式,推荐 java配置取代xml
@Configuration 和 @Bean
@Configuration作用于类,相当于一个xml文件
@Bean作用于方法上,相当于xml中的Bean
demo:

  1. 先写一个User POJO
public class User {
    private String name;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
  1. 编写UserDAO
public class UserDao{
    public List<User> getUserList()
    {...//从数据库中查用户列表}
    }

//这里模拟从数据库中取到数据
public class UserDao {
    public List<User> getUserList()
    {
        List<User> list = new ArrayList<>();
        for (int i = 0; i <5; i++) {
            User u = new User();
            u.setName("L"+i);
            u.setSex(i%2+"");
            list.add(u);
        }
        return list;
    }
}

  1. 编写UserService实现业务逻辑
@Service
public class UserService {
    @Autowired
    private UserDao userDao;
    public List<User> getUserList(){
        return this.userDao.getUserList();
    }
}
  1. 编写SpringConfig配置类
    @Configuration
    @ComponentScan(basePackage = "com...*") //扫描包

在扫描的路径下,如果某个类的头上带有特定的注解如:@Component/@Repository/@Service/@Controller,
就会将这个对象作为Bean注册进Spring容器。

@Configuration
@ComponentScan(basePackages = "com.tsrain.spring_java_configuration")
public class SpringConfig {
    @Bean
    public UserDao getUserDao ()
    {
        return new UserDao();
    }
}

  1. 编写main函数测试
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService userService = context.getBean(UserService.class);
        List<User> list = userService.getUserList();
        for (User user:list) {
            System.out.println(user.getName()+" "+ user.getSex());
        }
        context.destroy();
    }
}

运行结果


image.png

demo目录结构


目录.png

文件关系:


demo实现.png

关于bean类型注释的补充

指定Bean名称

如果@Controller等注释不指定其value,则默认的bean名字为这个类的类名首字母小写.
如果指定value,@Controller(value="UserAction")或者@Controller("UserAction"),则使用value作为bean的名字。

指定Bean模式

@Scope注解
@Scope("prototype")来保证每一个请求有一个单独的Action来处理,避免线程安全问题。
@Scope(scope="singleton")是spring 默认的单例模式,这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全。

读取外部资源文件

可用于创建数据源
配置的类上面加注释
@PropertySource(value = "classpath:jdbc.properties",ignoreResourceNotFound=true)
取资源值时用 @Value("${jdbc.driverClassName}")注释变量注入这种类似方式。

读取xml配置文件

@ImportResource({"classpath:a-context.xml","classpath:another-context.xml"})

示例

  1. 资源文件映射到bean中
@Configuration
@ConfigurationProperties(prefix="com.tsrain")
@PropertySource(value="classpath:my.properties")
public class MyResource {
    private String name;
    private String url;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
}

my.properties

com.tsrain.name= NB
com.tsrain.url=www.666.com
上一篇 下一篇

猜你喜欢

热点阅读