junit 引入spring 注解管理_Spring框架学习(一)

Spring
Spring是一个JavaEE轻量级的一站式开发框架
优秀的架构:可维护性好,可扩展性好,性能
业界公认标准:高内聚,低耦合
高内聚:尽量将代码卸载与功能描述一致的模块中
低耦合:尽量减少类与类之间的直接关系
Spring框架核心:就是通过loC(控制反转)实现程序的解耦,从而提高程序的维护性和扩展性
Spring在开发中主要是与其他框架进行整合(相当于一个容器)
Spring核心容器包含:Beans、Core、Context 、SpEL
Spring官网---->http://spring.io

125f148904026022a8e8bdf31c0102d3.png


Spring创建项目

  1. 新建java项目
  2. 导入4个jar包,commons-logging包
  3. src下创建applicationContext.xml,在官方beans.html中找到代码复制
  4. 新建包,创建类(普通在测试类中new对象是强耦合--正控,需要用<bean>来解耦--反控)
  5. 测试类:
    1. 读取applicationContext.xml配置文件,创建Spring容器对象:ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    2. 调用容器对bean管理:CustomService customeService = context.getBean("customService",CustomService.class);


IoC控制反转和依赖注入
IoC(Inverse of Control)相当于使用反射获取对象
DI(Dependency Injection)相当于使用反射中get,set方法为属性赋值

  • 新建接口和对应的N个接口实现类,service层
  • 新建web层类,并且声明接口和创建其对应的set方法(IoC和DI)
  • 配置applicationContext.xml,将接口和实现类写入bean标签并添加接口的依赖关系
  • 新建测试类,web层类直接调用其接口的方法


Spring的xml配置中的标签
<alias name="需要取别名的<bean>id" alias="别名"/>
<bean
id="类的唯一标识符"
class="类的全限定名"
name="标识,早期可以写特殊字符,可以写多个名称"
scope="生命周期(singleton,prototype,request,session)"
init-method="初始化方法创建对象后立即执行,方法名称"
destroy-method="销毁方法,单例对象会在容器销毁时销毁,多例不会销毁多例对象由开发者管理">
</bean>
<property name="需要注入的属性名称" value="基本数据类型"/ref="引用数据类型"/>
<constructor-arg name="构造方法参数名称" index="参数位置" type="参数类型" value=""/ref=""/>
获得properties的值,可以通过${key}读取配置文件中的值
Spring最主要使用IoC控制反转和依赖注入,将各个类之间的联系,依赖写xml的在<bean>中,不需要直接new对象,降低耦合度。所以Spring是轻量级(Spring共20个模块,只需要四个模块就可以启动框架,其余按需引入)、一站式(web开发的三层结构全部用Spring完成)的框架
IoC创建实例有四种方式:

  1. 直接使用无参构造函数-推荐
  2. 使用静态工厂
  3. 使用实例工厂
  4. 使用变种实力工厂,工厂实现FactoryBean接口

DI依赖注入:

  1. 将对象的属性通过Spring赋值
  2. setter方法(属性)注入
  3. 构造器注入
  4. p命名空间注入
  5. 支持值类型,引用类型和支持各种集合数据类型的注入


注解
Spring常用组件注解:@Component , @Controller , @Service , @Repository
Spring中的Compoment注解在spring2.5中就出现了,后面三者都是在3.0之后基于分层需要分化出来的,本质上这些注解的功能都是一样的,都是创建对象,开发中三者分别用于表现层,业务层,持久层
注解的属性
@Scope(表明生命周期,用于类上面)
@PostConstruct(初始化方法,用于方法上面)
@PreDestroy(销毁方法,用于方法上面)
用户依赖注入的注解(字段/成员变量注入)-- 推荐
@Autowired(字段/成员变量注入,默认是按照类型注入,默认会从Spring容器找到对应类型的对象进来。必须保证该类型至少有一个对应的bean,可以使用required属性表明是否必须有对象。用法是直接将其贴在成员变量上面)
@Qulifier(配合@Autowired,可以用于筛选出有多个相同类型的对象,用id区分,用法是直接将其贴在成员变量上面)
用户依赖注入的注解(set方法/属性注入)
@Autowired(set方法/属性注入,默认是按照类型注入,程序是会执行set方法,用法是直接将其贴在set方法上面)
@Qulifier(配合@Autowired,可以用于筛选出有多个相同类型的对象,用id区分,用法是直接将其贴在set方法上面)
用户依赖注入的注解(构造器注入):使用注解的IoC创建bean的情况下,默认bean中有什么构造器,spring就调用哪个构造器去创建对应的bean对象,并且自动注入
如果构造函数的参数类型有对应的多个bean,可以在参数前面添加@Qulifier
@Resource
字段注入:直接将其放在字段/成员变量上面。默认类型注入。可以用name属性区同类型多个对象,必须要保证注入的类型在Spring容器中最少有一个对象
方法注入:直接放在set方法/属性上面。默认类型注入。可以用name属性区同类型多个对象,必须要保证注入的类型在Spring容器中最少有一个对象
构造器注入:@Resource无法放在构造器上面
@Value
可以将xml文件中读取配置文件的内容,直接贴在字段上,直接可以将其value值直接设置给字段,开发者也可以手动赋值


可以写一个java类代替xml文件,使用完全的注解方式
正确的测试Spring容器
JVM-->Spring容器-->Junit-->Test-->测试代码
导入spring的test包
@Runwith(SpringJUnit4ClassRunner)
@ContextConfiguration("classpath:applicationContext.xml")
public void testName() throws Exception {
}
可以在容器里面一次运行多个测试方法
Ps:

  1. 注解使用必须在xml文件中配置包扫描位置
    1. <context:component-scan base-package="cn.tetsuya.service"/>
  2. 存注解配置替代xml文件,但是所有配置依旧存在,只是配置方式换成在类上面----SpringBoot
  3. SpringJDBC主要优点是能够让Spring自动控制事务,JdbcTemplate模板类可以进行数据表的增删改查
  4. JdbcDaoSupport可以将模板类重复代码进行封装,缺点是只能在xml中配置对应的DAO类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值