Spring中IOC的注解方式的配置

Spring中IOC的xml方式的配置
内容回顾:

1、什么是Spring?
Spring是SE、EE开发的一站式框架。

Web层:SpringMVC
Service层:Spring的Bean管理,声明式事务
DAO层:ORM模块,JDBC模板


2、Spring的优点

方便解耦合:IOC
AOP的开发:对程序进行扩展
轻量级框架
方便与其他框架整合


3、Spring的IOC入门

下载Spring的开发包
引入jar包,4个基本包+2个日志包
创建接口和实现类
将接口和实现类交给Spring管理
编写测试类


4、什么是IOC和DI?

IOC:控制反转,将对象的创建权,反转给Spring管理。
DI:依赖注入,前提是在IOC的环境下,Spring创建对象时,会将这个对象所依赖的属性设置进来。


5、Spring的工厂类(了解)

BeanFactory:老版本的工厂类
ApplicationContext:新版本的工厂类
ClassPathXmlApplicationContext:加载src类路径下的配置文件。
FileSystemXmlApplicationContext:加载磁盘路径上的配置文件。


6、Spring中bean标签的配置

id和name属性
生命周期的配置:init-method,destroy-method

scope作用范围属性:
singleton:默认的值,单例模式
prototype:多例模式


7、Spring中Bean的实例方式(了解)

默认无参数构造方法的方式
静态工厂实例化的方式
实例工厂实例化的方式


8、Spring的属性注入方式

构造方法属性注入
set方法属性注入
p名称空间的属性注入
SpEL表达式的属性注入
集合属性的注入


9、Spring的整合web项目

演示Spring和web项目中一些问题:
每次请求都会创建Spring的工厂,浪费服务器资源。

解决方案:
在服务器启动的时候创建Spring的工厂。
将工厂保存到ServletContext中,即整个项目都能访问到。
每次获取工厂的时候从ServletContext中获取获取。

整合web项目:
引入spring_web.jar。
配置ContextLoaderListener。
默认加载的是/WEB-INF/applicationContext.xml。
需要配置修改加载配置文件的路径。
通过工具类获取工厂。




Spring中IOC的注解方式的配置

1、创建web项目,引入jar包,配置文件

在Spring4的版本中,除了引入4个基本包,2个日志包外,还需要引入aop的包。

在src下引入log4j.properties日志属性文件。

在src下新建applicationContext文件。
去Spring框架开发包中找对应的约束文件的写法。

spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html中,倒数第几个,context的约束。


2、编写配置文件约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

</beans>

3、编写实体类,接口,实现类

实体类:

package com.pipi.spring.demo2;

public class User {

    private String name;
    private String password;
	// setter and getter,构造方法,重写toString()
}

Service层:

package com.pipi.spring.demo2;

public interface UserService {

    void save(User user);
}
package com.pipi.spring.demo2;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource(name="userDao")
    private UserDao userDao;

    @PostConstruct  // 相当于init-method="init"
    public void init() {
        System.out.println("UserServiceImpl中的init()初始化方法执行了!");
    }

    @PreDestroy  // 相当于destroy-method="destroy"
    public void destroy() {
        System.out.println("UserServiceImpl中的destroy()销毁方法执行了!");
    }

    @Override
    public void save(User user) {
        System.out.println("UserServiceImpl中的save()方法执行了!");
        userDao.save(user);
    }
}

Dao层:

package com.pipi.spring.demo2;

public interface UserDao {

    void save(User user);
}
package com.pipi.spring.demo2;

import org.springframework.stereotype.Repository;

@Repository("userDao")
public class UserDaoImpl implements UserDao {

    @Override
    public void save(User user) {
        System.out.println("UserDaoImpl中的save()方法执行了!" + user);
    }
}

4、编写配置文件

经过我测试,好像核心配置文件中只能有一个<context: />标签。
即不能在分模块中使用<context: />标签,不然会有多个。

	<!-- 配置组件扫描 -->
    <context:component-scan base-package="com.pipi.spring.demo2" />

5、编写测试类

	@Test
    public void test01() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.save(new User("张三", "aaa123"));
    }

IOC注解方式的属性注入

注解方式:使用注解方式的属性注入,可以没有set()方法

属性如果有set方法,需要将属性注入的注解,添加到set方法上。

属性如果没有set方法,需要将属性注入的注解,添加到属性上。


Spring的IOC注解详解

1、@Component:组件
修饰一个类,功能是将这个类交给Spring管理。

这个注解有三个衍生注解(目前功能类似,以便后期扩展):
@Controller :注解web层的类
@Service :注解service层的类
@Repository :注解dao层的类


2、属性注入的注解

普通属性:
@Value :设置普通属性的值

对象类型属性:
@Autowired :设置对象类型属性的值,但是它是按照类型完成属性注入。

而我们习惯是按照名称完成属性注入:此时需要@Autowired和@Qualifier一起使用,按照名称完成属性注入。

@Resource :功能是@AutoWired和@Qualifier的替代品,不是Spring中的注解,而是Spring实现的一套规范中,javax中的注解(java EE6中的javax.annotation.Resource)。


3、Bean的其他注解

(1)生命周期相关的注解(了解):

@PostConstruct :初始化方法的注解
@PreDestroy :销毁方法的注解


(2)Bean的作用范围的注解

@Scope :作用范围
取值有:singleton(默认值单例),prototype(多例),request,session,globalsession。


4、IOC的XML和注解开发的比较

适用场景:
XML:基本可以适用任何地方。
注解:有些地方用不了,比如有些类不是自己定义的。你无法在源代码中加@Resource。

XML配置:结构清晰,哪些类交给了框架管理,注入了哪些属性,一目了然,便于维护。
注解配置:编写配置方便,但结构不清晰,需要看源代码。

XML和注解一起使用的开发方式(各取所长):XML管理Bean,注解完成属性注入。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值