Spring学习笔记一配置元数据及Spring容器的创建和使用

本文主要是总结一下Spring中的配置元数据,以及Spring容器的创建和使用。

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法。IoC容器是Spring Application Framework的核心。IoC容器主要职责是对应用程序的对象进行实例化、初始化、装配,以及在对象的整个生命周期中提供其他的Spring功能。那些构成应用程序的主要部分,并由Spring管理的对象称为Bean(也是普通的POJO)。

1.1 配置元数据

配置元数据:向Spring容器提供相关信息来实例化Bean,并指定如何装配这些Bean。

Spring容器首先获取应用程序类,并与配置元数据结合在一起,然后创建和装配Bean。

1.2 SpringBean

Bean主要有:Ad(广告类),AdDao接口,AdDao实现类AdDaoIDBCImpl,AdService接口,以及AdService的实现类AdServiceImpl。

//广告类
public class Ad extends BaseBean {
    private Long id;       //id唯一标识符
    private String title; //标题
    private String imgFileName;//图片文件名
    private String link;   //链接地址
    private Long weight;   //权重
    
//setter和getter方法省略
    
}
public interface AdDao {
    /**
     * 新增
     * @param ad 广告表对象
     * @return 影响行数
     */
    int insert(Ad ad);
      
}

public class AdDaoJDBCImpl implements AdDao {	
	@Override
	public int insert(Ad ad) {
		//插入数据库操作
	}	
}
 

 

public interface AdService {
    /**
     * 新增广告
     * @param adDto
     * @return 是否新增成功:true-成功;fale-失败
     */
    boolean add(AdDto adDto);   
  
}
public class AdServiceImpl implements AdService {

	private AdDao adDao;

public void setAdDao(AdDao adDao){
    this.adDao=adDao;
}

	@Override
	public boolean add(AdDao adDao) {
		Ad ad = new Ad();
		ad.setTitle(adDto.getTitle());
		ad.setLink(adDto.getLink());
		ad.setWeight(adDto.getWeight());
		
			try {
				
				ad.setImgFileName("");
				adDao.insert(ad);
				return true;
			} catch (IllegalStateException | IOException e) {
				// TODO 需要添加日志
				return false;
			}
		} else {
			return false;
		}
	}

	
}

1.3 配置元数据格式

(1)基于java配置的元数据

//配置类
@Configuration//该注解告诉Spring该类是一个Bean,并且包含配置元数据
public class XnnBeanConfiguration{

//以下是工厂方法,这些方法在启动期间被Spring容器调用,返回值被视为Spring管理的Bean
//默认情况下,方法的名称就是Bean的名称
//在工厂方法中,首先通过调用setter方法设置所需依赖,然后使用具体类创建Bean,并将其返回。
//注,(1)依赖项也可以 以构造函数参数的形式赋予;
//(2)工厂方法的返回类型一般是接口,这样可以更容易的使用不同Bean的实现类来配置系统。
//(3)默认情况下,每个Bean作用域是单实例(singleton),即工厂方法被调用多次,返回的都是同一个实例。
@Bean
public AdService adService(){
AdServiceImpl bean= new AdServiceImpl();
bean.setAdDao(adDao());
return bean;

}

@Bean
public AdDao adDao(){
AdDaoJDBCImpl bean= new AdDaoJDBCImpl ();
return bean;

}

}

(2)XML文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd>

     <bean id="adService" class="com.xnn.service.AdService">
        <property name="adDao" ref="adDao"/>
      
    </bean>

    <bean id="adDao" class="com.xnn.dao.AdDao">
      
    </bean>

(3)基于注解的配置元数据

@Service("adService")
public class AdServiceImpl implements AdService {

	private AdDao adDao;

@Autowired
public void setAdDao(AdDao adDao){
    this.adDao=adDao;
}

	@Override
	// TODO 可以改成获取失败详细原因
	public boolean add(AdDao adDao) {
		Ad ad = new Ad();
		ad.setTitle(adDto.getTitle());
		ad.setLink(adDto.getLink());
		ad.setWeight(adDto.getWeight());
		
			try {
				
				ad.setImgFileName("");
				adDao.insert(ad);
				return true;
			} catch (IllegalStateException | IOException e) {
				// TODO 需要添加日志
				return false;
			}
		} else {
			return false;
		}
	}

	
}

@Repository("adDao")
public class AdDaoJDBCImpl implements AdDao {	
	@Override
	public int insert(Ad ad) {
		//插入数据库操作
	}	
}

注:Spring容器独立于配置元数据格式,可以根据需要选择其中一个,或者混合使用。

2.1 配置和使用容器

 

这是一种分层体系结构,每一层仅与它下面的那层进行交互,并且不知道下层Bean的具体实现。这种体系结构使得应用程序更加模块化和可测试,程序维护也变得更加容易,只修复出现问题的那层即可。

三种对应于元数据格式的创建和使用Spring容器的方式:

(1)基于java的配置,创建和使用Spring容器

1. 创建基于java的Bean定义类:XnnBeanConfiguration,即上面1.3介绍的元数据格式1;

2. 然后创建Spring容器,获得Bean,并可以使用Bean;

public class XnnTest{

@Test
public void test(){

//通过以下可以看到,Spring容器也是一个Java对象,并负责管理程序中的其他对象
//参数是Java配置元数据类
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(XnnBeanConfiguration.class);

//查找bean
//参数1:Bean名称
//参数2:类型参数,以便找到的Bean实例转换为该类型
AdService adService=applicationContext.getBean("adService",AdService.class);

//获取adService后,就可以调用其中的方法了

}

}

(2)基于XML的配置,创建和使用Spring容器

1. 创建一个XML配置文件,,即上面1.3介绍的元数据格式2;

2. 然后创建Spring容器,获得Bean,并可以使用Bean;

public class XnnTest{

@Test
public void test(){

//通过以下可以看到,Spring容器也是一个Java对象,并负责管理程序中的其他对象
//ClassPathApplicationContext 位于应用程序的类路径中,从类路径加载指定的xml文件作为构造函数参数
//参数为xml配置元数据文件
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");

//查找bean
//参数1:Bean名称
//参数2:类型参数,以便找到的Bean实例转换为该类型
AdService adService=applicationContext.getBean("adService",AdService.class);

//获取adService后,就可以调用其中的方法了

}

}

(3)基于Java注解的配置,创建和使用Spring容器

1. 给Service层、DAO层类加注解,即上面1.3介绍的元数据格式3;

2. 创建Spring bean配置文件,添加扫描bean

   <!-- 扫描service包 -->
	<context:component-scan base-package="com.xnn.service" />

3. 将Spring bean配置文件作为ClassPathApplicationContext 的构造杉树参数,并实例化ClassPathApplicationContext 。

public class XnnTest{

@Test
public void test(){

//通过以下可以看到,Spring容器也是一个Java对象,并负责管理程序中的其他对象
//ClassPathApplicationContext 位于应用程序的类路径中,从类路径加载指定的xml文件作为构造函数参数
//参数为spring bean配置文件
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-beans.xml");

//查找bean
//参数1:Bean名称
//参数2:类型参数,以便找到的Bean实例转换为该类型
AdService adService=applicationContext.getBean("adService",AdService.class);

//获取adService后,就可以调用其中的方法了

}

}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值