spring-day02

1.基于注解格式正确定义bean

(1)注解加配置方式

(1)使用@Component定义bean

@Component("bookDao")
public class BookDaoImpl implements BookDao {}
@Component("bookService")
public class BookServiceImpl implements BookService {}

(2)核心配置文件中通过组件扫描加载bean

<context:component-scan base-package="com.spring"/>

注:
Spring提供@Component注解的三个衍生注解,作用完全一致
@Controller:用于表现层bean定义
@Service:用于业务层bean定义
@Repository:用于数据层bean定义

(2)纯注解方式

(1)定义一个配置类,写上注解

@Configuration
@ComponentScan("com.spring")
public class SpringConfig {}

(2)读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

//加载配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//加载配置类初始化容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

2.能够基于注解格式正确定义管理第三方bean

使用独立的配置类管理第三方的bean
(1)独立的配置类,以jdbc为例

public class JdbcConfig {    

		@Bean    //返回的DataSource作为一个bean被接收
		public DataSource dataSource(){       
		DruidDataSource ds = new DruidDataSource();        			
		ds.setDriverClassName("com.mysql.jdbc.Driver");        	
		ds.setUrl("jdbc:mysql://localhost:3306/spring_db");        
		ds.setUsername("root");        
		ds.setPassword("root");        
		return ds;    
		
	}
}

(2)将独立的配置类导入核心配置类

@Configuration
@Import(jdbcConfig.class)	//若有多个独立配置类则需要@Import({jdbcConfig.class,xxx.class})用数组的格式
public class SpringConfig {}

3.能够基于注解格式为第三方bean注入资源/属性

(1)简单类型依赖注入,直接抽取出来作为变量,上面注解Value填写值

public class JdbcConfig {    
	@Value("com.mysql.jdbc.Driver")    
	private String driver;    
	@Value("jdbc:mysql://localhost:3306/spring_db")    
	private String url;   
	@Value("root")    
	private String userName;    
	@Value("root")    
	private String password;   
	@Bean    
	public DataSource dataSource(){        
		DruidDataSource ds = new DruidDataSource();        
		ds.setDriverClassName(driver);        
		ds.setUrl(url);        
		ds.setUsername(userName);        
		ds.setPassword(password);        
		return ds;    
	}
}

(2)引用类型依赖注入
在核心配置类中使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息

	@Bean			//只需要加一个形参,spring会按照类型查找对应的bean,若有则直接注入
	public DataSource dataSource(BookService bookService){    
	System.out.println(bookService);    //打印可看到已经注入成功
	DruidDataSource ds = new DruidDataSource();    
	//属性设置    
	return ds;
 }

4.能够基于注解格式实现Spring整合MyBatis

(1)导入依赖

<dependency>//spring操作jdbc的依赖
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>//spring整合mybatis的依赖
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

(2)在config包下创建三个类,分别为独立配置类,spring核心配置类,spring整合mybatis的类
独立配置类JdbcConfig

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;

    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

spring核心配置类SpringConfig

@Configuration		//@Configuration:表示该类为spring核心配置类
@ComponentScan("com.itheima")		//@ComponentScan:扫描对应包下的bean
@PropertySource("classpath:jdbc.properties")		//@PropertySource:加载类路径jdbc.properties文件
@Import({JdbcConfig.class,MybatisConfig.class})		//@Import:导入其他独立配置类
public class SpringConfig {
}

spring整合mybatis的类MybatisConfig

public class MybatisConfig {
    //定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setTypeAliasesPackage("com.itheima.domain");	//真正需要修改的地方,原配置文件中为<typeAliases> <package name="com.itheima.domain"/> </typeAliases>初始化类型别名
        ssfb.setDataSource(dataSource);
        return ssfb;
    }
    //定义bean,返回MapperScannerConfigurer对象
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.dao");//真正需要修改的地方,mybatis需要映射的mapper对象的位置
        return msc;
    }
}

(3)编写测试类

public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

        AccountService accountService = ctx.getBean(AccountService.class);

        Account ac = accountService.findById(1);
        System.out.println(ac);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值