Spring纯注解配置实现代码示例解析

网友投稿 223 2022-11-27


Spring纯注解配置实现代码示例解析

问题

我们发现,之所以我们现在离不开 xml 配置文件,是因为我们有一句很关键的配置:

如果他要也能用注解配置,那么我们就离脱离 xml 文件又进了一步。

另外,数据源和 JdbcTemplate 的配置也需要靠注解来实现。

新注解说明

@Configuration

作用:

用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用

AnnotationApplicationContext(有@Configuration 注解的类.class)。

属性:

value:用于指定配置类的字节码

实例:

示例代码:

/**

* spring 的配置类,相当于 bean.xml 文件

* @author

* @Company

* @Version 1.0

*/

@Configuration

public class SpringConfiguration {

}

注意:

我们已经把配置文件用类来代替了,但是如何配置创建容器时要扫描的包呢?

请看下一个注解。

@ComponentScan

作用:

用于指定 spring 在初始化容器时要扫描的包。作用和http://在 spring 的 xml 配置文件中的:

是一样的。

属性:

basePackages:用于指定要扫描的包。和该注解中的 value 属性作用一样。

示例代码:

/**

* spring 的配置类,相当于 bean.xml 文件

* @author

* @Company

* @Version 1.0

*/

@Configuration

@ComponentScan("com.itheima")

public class SpringConfiguration {

}

注意:

我们已经配置好了要扫描的包,但是数据源和 JdbcTemplate 对象如何从配置文件中移除呢?

请看下一个注解。

@Bean

作用:

该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。

属性:

name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。

/**

* 连接数据库的配置类

* @author

* @Company

* @Version 1.0

*/

public class JdbcConfig {

/**

* 创建一个数据源,并存入 spring 容器中

* @return

*/

@Bean(name="dataSource")

public DataSource createDathttp://aSource() {

try {

ComboPooledDataSource ds = new ComboPooledDataSource();

ds.setUser("root");

ds.setPassword("1234");

ds.setDriverClass("com.mysql.jdbc.Driver");

ds.setJdbcUrl("jdbc:mysql:///spring_day02");

return ds;

} catch (Exception e) {

throw new RuntimeException(e);

}

}

/**

* 创建一个 DBAssit,并且也存入 spring 容器中

* @param dataSource

* @return

*/

@Bean(name="runner")

@Scope("prototype") //配置QueryRunner为多列对象 防止多个dao调用使线程混乱

public QueryRunner createDBAssit(DataSource dataSource) {

return new DBAssit(dataSource);

}

}

注意:

我们已经把数据源和 DBAssit 从配置文件中移除了,此时可以删除 bean.xml 了。

但是由于没有了配置文件,创建数据源的配置又都写死在类中了。如何把它们配置出来呢?

请看下一个注解。

@PropertySource

用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。

属性:

value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath:

配置:

/**

* 连接数据库的配置类

* @author 黑马程序员

* @Company http://ithiema.com

* @Version 1.0

*/

public class JdbcConfig {

@Value("${jdbc.driver}")

private String driver;

@Value("${jdbc.url}")

private String url;

@Value("${jdbc.username}")

private String username;

@Value("${jdbc.password}")

private String password;

/**

* 创建一个数据源,并存入 spring 容器中

* @return

*/

@Bean(name="dataSource")

public DataSource createDataSource() {

try {

ComboPooledDataSource ds = new ComboPooledDataSource();

ds.setDriverClass(driver);

ds.setJdbcUrl(url);

ds.setUser(username);

ds.setPassword(aZulwpassword);

return ds;

} catch (Exception e) {

throw new RuntimeException(e);

}

}

}

jdbc.properties 文件:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/day44_ee247_spring

jdbc.username=root

jdbc.password=1234

注意:

此时我们已经有了两个配置类,但是他们还没有关系。如何建立他们的关系呢?

请看下一个注解。

@Import

作用:

用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问

题。

属性:

value[]:用于指定其他配置类的字节码。

示例代码:

@Configuration

@ComponentScan(basePackages = "com.itheima.spring")

@Import({ JdbcConfig.class})

public class SpringConfiguration {

}

@Configuration

@PropertySource("classpath:jdbc.properties")

public class JdbcConfig{

}

通过注解获取容器:

ApplicationContext ac =new AnnotationConfigApplicationContext(SpringConfiguration.class);


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA中已配置阿里镜像但maven无法下载jar包的问题及解决方法
下一篇:Java类初始化时机测试方法解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~