SpringConfig.java
package com.day02Jdbc.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 9:25 2018/11/10
*/
@Configuration//指定该类是一个配置类、等价于一个spring的配置文件
@ComponentScan(basePackages="com.day02Jdbc")//指定扫包范围
@Import(JdbcConfig.class) //引入JdbcConfig.class文件
public class SpringConfig {
}
JdbcConfig.java
public class JdbcConfig {
/**
* Bean注解:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
* name属性:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
* @return
*/
@Bean(name="dataSource")
public DataSource createDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
@Bean(name="jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
创建Jdbc属性文件 resources/jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=sswqzx
在jdbcConfig中引入jdbc属性资源文件
package com.day02Jdbc.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
//import javax.sql.DataSource;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 9:28 2018/11/10
*/
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driverClass}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String user;
@Value("${jdbc.password}")
private String password;
/**
* Bean注解:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
* name属性:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
* @return
*/
@Bean(name="dataSource")
public DataSource createDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name="jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
注意:
@Bean注解也可以不用指定name,因为基本上都是按照类型注入;如果不指定name,默认是@Bean注解所在的方法的名字。
在SpringConfig中引入JdbcConfig
package com.day02Jdbc.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 9:25 2018/11/10
*/
@Configuration//指定该类是一个配置类、等价于一个spring的配置文件
@ComponentScan(basePackages="com.day02Jdbc")//指定扫包范围
@Import(JdbcConfig.class) //引入JdbcConfig.class文件
public class SpringConfig {
}
注意:在使用@Component、@Service、@Repository注解时,可以不指定bean的id,因为基本上都是按照类型注入;如果不指定id,默认是类名首字母小写。
CustomerServiceImpl.java
package com.day02Jdbc.service.Impl;
import com.day02Jdbc.dao.CustomerDao;
import com.day02Jdbc.domain.Customer;
import com.day02Jdbc.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 17:06 2018/11/8
*/
@Service("customerService")
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao ;
// public void setCustomerDao(CustomerDao customerDao){
// this.customerDao = customerDao;
// }
@Override
public List findAllCustomer() {
List list = customerDao.findAll();
return list;
}
}
CustomerDaoImpl.java
package com.day02Jdbc.dao.Impl;
import com.day02Jdbc.dao.CustomerDao;
import com.day02Jdbc.domain.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 17:09 2018/11/8
*/
@Repository("customerDao")
public class CustomerDaoImpl implements CustomerDao {
@Autowired
private JdbcTemplate jdbcTemplate;//不需要实例化,通过spring依赖注入进来,采用xml配置,需要提供set方法
// public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
// this.jdbcTemplate = jdbcTemplate;
// }
@Override
public List findAll() {
List list = jdbcTemplate.query("select * from cst_customer",new BeanPropertyRowMapper(Customer.class));
return list;
}
}
package com.day02Jdbc.test;
import com.day02Jdbc.config.SpringConfig;
import com.day02Jdbc.domain.Customer;
import com.day02Jdbc.service.CustomerService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 9:44 2018/11/10
*/
//@RunWith(SpringJUnit4ClassRunner.class)//指定采用spring的运行器来执行单元测试方法
//@ContextConfiguration("classpath:applicationContext.xml")//指定spring配置文件的路径
public class TestFindAnno {
@Test
public void test1(){
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
CustomerService customerService = (CustomerService) ac.getBean("customerService");
List list = customerService.findAllCustomer();
for (Customer customer : list) {
System.out.println("customer = " + customer);
}
}
}
@Configuration
作用:
用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解
。获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。
属性:
value:用于指定配置类的字节码
@ComponentScan
作用:
用于指定spring在初始化容器时要扫描的包。常在SpringConfig配置文件中
作用和在spring的xml配置文件中的: 是一样的。
属性:
basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。
@Bean
作用:
该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
属性:
name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。如果不写name、默认就是方法的名称
@PropertySource
作用:
用于加载.properties文件中的配置。例如我们配置数据源时,(加载jdbc.properties)
可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置
属性:
value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath。
@Import
作用:
用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题
属性:
value[]:用于指定其他配置类的字节码。