package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.stereotype.Component;
@Component("dao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("BookDaoImpl...");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.test.dao.impl"></context:component-scan>
</beans>
package com.test.dao;
public interface BookDao {
void save();
}
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.stereotype.Component;
@Component("dao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("BookDaoImpl...");
}
}
package com.test.service;
public interface BookService {
void save();
}
package com.test.service.impl;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.stereotype.Component;
@Component
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("BookServiceImpl...");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.test.dao.impl"></context:component-scan>
<context:component-scan base-package="com.test.service"></context:component-scan>
</beans>
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = context.getBean("dao",BookDao.class);
System.out.println(bookDao);
BookService bean = context.getBean(BookService.class);
System.out.println(bean);
}
}
/*
com.test.dao.impl.BookDaoImpl@5427c60c
com.test.service.impl.BookServiceImpl@6366ebe0
*/
@Configuration
@ComponentScan("com.test")
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
package com.test.dao;
public interface BookDao {
void save();
}
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.stereotype.Component;
@Component("dao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("BookDaoImpl...");
}
}
package com.test.service;
public interface BookService {
void save();
}
package com.test.service.impl;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.stereotype.Component;
@Component
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("BookServiceImpl...");
}
}
package com.test.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.test")
public class SpringConfig {
}
import com.test.config.SpringConfig;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao = context.getBean("dao",BookDao.class);
System.out.println(bookDao);
BookService bean = context.getBean(BookService.class);
System.out.println(bean);
}
}
/*
com.test.dao.impl.BookDaoImpl@77e4c80f
com.test.service.impl.BookServiceImpl@255b53dc
*/
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Scope("singleton")
@Component("dao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("BookDaoImpl...");
}
}
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Scope("singleton")
@Component("dao")
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("BookDaoImpl...");
}
@PostConstruct
public void init(){
System.out.println("init...");
}
@PreDestroy
public void destroy(){
System.out.println("destroy...");
}
}
package com.test.service.impl;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
/*set可以省略*/
/*public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}*/
public void save() {
System.out.println("BookServiceImpl...");
bookDao.save();
}
}
注意:

package com.test.service.impl;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier("dao2")
private BookDao bookDao;
/*set可以省略*/
/*public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}*/
public void save() {
System.out.println("BookServiceImpl...");
bookDao.save();
}
}
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("dao1")
public class BookDaoImpl implements BookDao {
@Value("小马哥")
private String name;
public void save() {
System.out.println("BookDaoImpl..."+name);
}
}
@PropertySource("jdbc.properties")
jdbc.properties
name=Jack
package com.test.dao;
public interface BookDao {
void save();
}
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("dao1")
public class BookDaoImpl implements BookDao {
/*@Value("小马哥")*/
@Value("${name}")
private String name;
public void save() {
System.out.println("BookDaoImpl..."+name);
}
}
package com.test.dao.impl;
import com.test.dao.BookDao;
import org.springframework.stereotype.Component;
@Component("dao2")
public class BookDaoImpl2 implements BookDao {
public void save() {
System.out.println("BookDaoImpl2...");
}
}
package com.test.service;
public interface BookService {
void save();
}
package com.test.service.impl;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier("dao1")
private BookDao bookDao;
/*set可以省略*/
/*public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}*/
public void save() {
System.out.println("BookServiceImpl...");
bookDao.save();
}
}
package com.test.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@ComponentScan("com.test")
@PropertySource("jdbc.properties")
public class SpringConfig {
}
import com.test.config.SpringConfig;
import com.test.dao.BookDao;
import com.test.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
BookService dao = context.getBean(BookService.class);
dao.save();
}
}
/*
BookServiceImpl...
BookDaoImpl...Jack
*/
SpringConfig:
package com.jkj.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
//2.添加@Bean,表示当前方法的返回值是一个bean
@Bean
//1.定义一个方法获得要管理的对象
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
Test:
import com.jkj.config.SpringConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import javax.sql.DataSource;
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
DataSource bean = context.getBean(DataSource.class);
System.out.println(bean);
}
}
使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据使用数组格式。
案例:
SpringConfig:
package com.jkj.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import javax.sql.DataSource;
@Configuration
@Import(JdbcConfig.class)
public class SpringConfig {
}
JdbcConfig:
package com.jkj.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
//2.添加@Bean,表示当前方法的返回值是一个bean
@Bean
//1.定义一个方法获得要管理的对象
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息
案例:
SpringConfig:
package com.jkj.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import javax.sql.DataSource;
@Configuration
@ComponentScan("com.jkj.config")
public class SpringConfig {
}
JdbcConfig:
package com.jkj.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class JdbcConfig {
//2.添加@Bean,表示当前方法的返回值是一个bean
@Bean
//1.定义一个方法获得要管理的对象
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
public class JdbcConfig {
@Value("com.mysql.jdbc.Driver")
private String driver;
@Value("jdbc:mysql://localhost:3306/spring")
private String url;
@Value("root")
private String username;
@Value("root")
private String password;
//2.添加@Bean,表示当前方法的返回值是一个bean
@Bean
//1.定义一个方法获得要管理的对象
public DataSource dataSource(){
System.out.println(bookDao);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
引用类型注入只需要bean定义方法设置形参即可,容器会根据类型自动装配对象。
//2.添加@Bean,表示当前方法的返回值是一个bean
@Bean
//1.定义一个方法获得要管理的对象
public DataSource dataSource(BookDao bookDao){
System.out.println(bookDao);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
