一、组件扫描
context:component-scan 标签设置base-package属性
spring容器会自动扫描该包和子包,查找类上面是否有组件注解,有则纳入容器管理
spring会自动按照组件bean的类名首字母改小写创建bean(单例模式)
二、组件注解
@Controller:用于声明表示的组件注解(必须用在表示层)
@Service:用于声明服务层的组件注解
@Repository:用于声明持久层的组件注解
@Component:用于声明三层以外的通用组件注解(包含以上三种),一般用于工具类
三、依赖注入注解
@Autowired注解(自动装配):用于根据类型给引用注入容器的对象。
属性上使用(可省略set方法)、方法上使用、构造方法上使用
@Qualifier注解:用于指定注入的对象名,使用@Autowired注入对象时,@Autowired没有指定对象名的属性,只能通过@Qualifier字段容器中对象名,必须搭配@Autowired注解使用
@Resource注解:功能等同 @Autowired + @Qualifier ,可以通过name属性指定对象名(不能用于构造方法)——官方注解
@Value注解:注入基本数据类型和包装类和String类型,可以使用EL表达式 ${}
sql注入,sql安全问题,通过修改语句结构而改变sql语句判断,得到想要的数据(非预编译语句对象_Statement)
四、生命周期
@Scope注解 :制定bean的作用范围,value属性可使用 singleton prototype request session globalsession
用于单例时:
程序加载配置文件创建容器是被创建,只要容器还在就会一直存活,当应用停止容器被销毁时便消亡
用于多例时:
程序加载配置文件创建容器后,调用getBean方法时被创建,只要对象被使用就一直存活,当对象长时间不使用则被Java垃 圾回收机制回收
用于request时:spring将创建的对象放在request作用域中
用于session时:spring将创建的对象放在session作用域中
用于globalSession时:应用域集群环境,如果没有集群环境则相当于session
单例对象:每次从spring容器中获取的都是同一个对象
多例对象:每次从spring容器中获取的都是重新创建的对象
默认不加@Scope或者声明了value=”singleton”的都是单例对象
@PostConstruct注解 用于指定初始化方法
@PreDestroy注解 用于指定销毁方法
五、纯注解
通过注解替代xml文件
新建一个配置类并使用 @Configuration 注解标记为配置类
使用 @ComponentScan 注解替代包扫描
使用 @PropertySource 注解替代读取数据源
在类中,使用 @Bean 注解替代
传入参数时,由于spring自动调用方法,会自动根据参数类型查找容器中的bean注入进来,找不到就会报错,所以参数需要带注解
_
六、整合Junit单元测试
依赖包
在测试类中使用注解:
@RunWith(SpringJUnit4ClassRunner.class)——Spring框架启动的逻辑代码
@ContextConfiguration(classes = SpringConfig.class)——SpringConfig为配置类,没有配置类则可以用xml文件
使用上面这两个注解时便省去了获取容器的两行长代码,提高了开发效率
