目录

  • 1 2023广东省精品课程评审申报章节
    • 1.1 申报书
    • 1.2 总结报告
    • 1.3 课程数据信息表
    • 1.4 自评报告
    • 1.5 专家组评语
    • 1.6 相关佐证
  • 2 2020校精品课程评审申报章节
    • 2.1 验收材料总文档
    • 2.2 精品开放课程申报书
    • 2.3 精品开放课程结题验收报告书
    • 2.4 精品开放课程结题验收总结报告
    • 2.5 精品开放课程结题验收项目汇总表
    • 2.6 佐证1.课程基础与建设目标
      • 2.6.1 校本教材
      • 2.6.2 论文
    • 2.7 佐证2.课程设计
      • 2.7.1 课程定位
      • 2.7.2 建设方式
    • 2.8 佐证3.更新与共享
      • 2.8.1 吸引力
      • 2.8.2 内容更新
      • 2.8.3 媒体应用
    • 2.9 佐证4.教学团队
      • 2.9.1 负责人
      • 2.9.2 教学队伍
    • 2.10 佐证5.教学资源
      • 2.10.1 基本资源
        • 2.10.1.1 单元设计
        • 2.10.1.2 课件PPT
        • 2.10.1.3 授课视频
      • 2.10.2 拓展资源
      • 2.10.3 资源创新
    • 2.11 佐证6.课程特色
      • 2.11.1 内容
      • 2.11.2 教学组织
      • 2.11.3 教学模式
    • 2.12 佐证7.目标实现
      • 2.12.1 考评
      • 2.12.2 能学
      • 2.12.3 辅教
  • 3 第一章 Spring 简介
    • 3.1 思政教育
    • 3.2 Sring 概述
    • 3.3 Spring 优点
    • 3.4 Spring 框架结构
    • 3.5 Spring 框架特征
    • 3.6 Spring 入门程序
    • 3.7 Spring 依赖注入
    • 3.8 本章小结
    • 3.9 习题1
  • 4 第二章 Spring中bean的配置和实例化
    • 4.1 思政教育
    • 4.2 Spring中bean的配置
    • 4.3 Bean的实例化
    • 4.4 bean的作用域
    • 4.5 Bean的生命周期
    • 4.6 Bean的装配方式
    • 4.7 应用案例:Annotation注解
    • 4.8 本章小结
    • 4.9 习题2
  • 5 第三章  Spring面向切面编程AOP
    • 5.1 Spring  AOP的基本概念
    • 5.2 通知类型介绍
    • 5.3 JDK动态代理
    • 5.4 Spring AOP
    • 5.5 应用案例:AspectJ开发
    • 5.6 本章小结
    • 5.7 习题3
  • 6 第四章  Mybatis原理
    • 6.1 基本内容
    • 6.2 JDBC的问题
    • 6.3 Hibernate的问题
    • 6.4 MyBatis优势
    • 6.5 MyBatis的工作原理
    • 6.6 MyBatis的数据库准备_MySQL
    • 6.7 应用案例:MyBatis入门程序
    • 6.8 Mybatis数据库基本操作示例
    • 6.9 习题4
  • 7 第五章  Mybatis反向工程
    • 7.1 动态SQL
    • 7.2 应用案例: Mybatis反向(逆向)工程
    • 7.3 Mybatis反向(逆向)工程代码解读
    • 7.4 习题5
  • 8 第六章  Spring、 Mybatis Mapper接口编程
    • 8.1 Mybatis反向工程生成的接口
    • 8.2 应用案例:SpringMVC、 Mybatis  Mapper接口编程
    • 8.3 习题6
  • 9 SpringMVC
    • 9.1 SpringMVC框架
    • 9.2 应用案例:SpringMVC
    • 9.3 应用案例:SpringMVC注解开发
    • 9.4 习题7
  • 10 SpringMVC数据绑定
    • 10.1 SpringMvc的数据绑定流程
    • 10.2 应用案例:SpringMVC参数绑定
    • 10.3 SpringMVC参数绑定数组和集合
    • 10.4 案例SpringMVC参数绑定数组
    • 10.5 习题8
  • 11 第九章、SpringMVC拦截器
    • 11.1 拦截器的实现
    • 11.2 拦截器的配置
    • 11.3 应用案例
    • 11.4 习题9
  • 12 第十章 文件上传
    • 12.1 文件上传原理
    • 12.2 创建工程
    • 12.3 应用案例
    • 12.4 习题10
  • 13 第十一章、课程资源管理系统
    • 13.1 系统需求
    • 13.2 开发环境
    • 13.3 数据库设计
    • 13.4 项目程序设计
  • 14 第十二章 职场沟通技能
    • 14.1 职场沟通原则与理念
  • 15 第十三章 如何与上司、同事沟通
    • 15.1 如何与上司、同事沟通
  • 16 第十四章 软件开发团队建设
    • 16.1 企业级应用开发团队组织技巧培训
应用案例:Annotation注解

2.6 Annotation注解

基于XML的装配可能会导致XML配置文件过于臃肿,给后续的维护和升级带来一定的困难。为此,Spring提供了对Annotation(注解)技术的全面支持。

上述程序我们可以替代如下:

UserDaoImpl类代码如下所示:

package impl;

import org.springframework.stereotype.Repository;

import dao.UserDao;

@Repository("userDao")

public class UserDaoImpl implements UserDao {

@Override

public void say() {

System.out.println("helloworld spring!");

}

}

UserDaoImpl类代码中我们添加了注解@Repository("userDao")其功能相当于配置文件中的<bean id="userDao" class="impl.UserDaoImpl"></bean>代码。

UserServiceImpl类如代码下所示:

package impl;

 

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import dao.UserDao;

import dao.UserService;

@Service("userService")

public class UserServiceImpl implements UserService {

@Resource(name="userDao")

UserDao userDao;

String username;

List<String> list;

 

public String getUsername() {

return username;

}

 

public void setUsername(String username) {

this.username = username;

}

 

public List<String> getList() {

return list;

}

 

public void setList(List<String> list) {

this.list = list;

}

 

public UserDao getUserDao() {

return userDao;

}

 

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

 

public void show() {

userDao.say();

System.out.println("userservice helloworld!");

System.out.println(username);

System.out.println(list.get(0));

System.out.println(list.get(1));

}

}

UserServiceImpl类代码中我们添加了注解@Service("userService"),其功能相当于配置文件中的<bean id=" userService " class="impl. UserServiceImpl"></bean>代码。

UserServiceImpl类代码中我们添加了注解@Resource(name="userDao"),其功能相当于配置文件中的<property name="userDao" ref="userDao"></property>代码。

最后程序运行结果与之前完全相同。这说明使用注解同样可以完成Bean的装配工作。

自动装配Bean属性

Spring提供了四种各具特色的自动装配策略:

1byName-把与Bean的属性具有相同名字的其他Bean自动装配到Bean的对应属性中。如果没有跟属性的名字相匹配的Bean,则该属性不进行装配。

2byType-把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。如果没有跟属性的类型相匹配的Bean,则该属性不被装配。

3constructor-把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。

4autodetect-首先尝试使用constructor进行自动装配。如果失败,再尝试使用byType进行自动装配。

byName自动装配:

不使用byName自动装配之前是这样声明的:

<bean  id="userService" class="impl.UserServiceImpl">

<property name="userDao" ref="userDao"></property>

</bean>

使用byName自动装配之后是这样的:

<bean  id="userService" class="impl.UserServiceImpl" autowire="byName">

</bean>

byName自动装配遵循一项约定,为属性自动装配ID与该属性的名字相同的Bean。通过设置autowire属性为byName,spring将为该bean的属性寻找与其名字相同的Spring Bean。使用byName的缺点是需要Bean的名字与其他bean的属性的名字一样。

byType自动装配:

byType自动装配的工作方式类似于byName自动装配,只不过不再是匹配属性的名字而是检查属性的类型。当我们尝试使用byType自动装配时,Spring会寻找哪一个Bean的类型与属性的类型相匹配。

constructor自动装配:

constructor自动装配具有和byType自动装配相同的局限性。当发现多个Bean匹配某个构造器的入参时,Spring不会尝试猜测哪一个Bean更适合自动装配。此外,如果一个类有多个构造器,它们都满足自动装配的条件时,Spring也不会尝试猜测哪一个构造器更适合使用。

最佳自动装配

如果想要自动装配bean,但是又不能决定该使用哪一种类型的自动装配,那么可以设置autowire属性为autodetect,spring 来决定。

默认自动装配

如果需要为Spring应用上下文中的每一个bean(或者其中的大多数)配置相同的autowire属性,那么就可以要求Spring为它所创建的所有bean应用相同的自动装配策略来简化配置,所需要的做的仅仅是在根元素<beans>上添加一个default-autowire属性:

Spring应用上下文中的所有bean。可以在一个Spring应用上下文中定义多个配置文件,每一个配置文件都可以有自己的默认自动装配策略。同样的,不能因为配置了一个默认的自动装配策略,就意味着所有的bean都只能使用这个默认的自动装配策略,还可以使用<bean>元素的autowire属性来覆盖<bean>元素所配置的默认自动装配策略。