009_IOC注解开发

一. @Component注解

1. @Component注解, 组件的意思, 修饰一个类, 有一个value属性, 可以给组件指定一个名字。相当于我们在Spring的XML配置文件里, 配置了一个bean, 给bean指定了一个名字, 并指定类。

2. @Component注解有三个衍生注解, 功能类似, 推荐使用:

2.1. @Controller: 修饰Web层类。

2.2. @Service: 修饰service层类。

2.3. @Repository: 修饰dao层类。

二. 属性注解

1. 普通属性注解: @Value设置普通属性的值。

2. 对象属性

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

2.2. @Qualifier: 按照名称完成属性注入。

2.3. 通常@Autowired和@Qualifier注解配合使用, 完成对象类型属性的按名称注入。

2.4. @Resource: 完成对象类型属性的按名称注入。一个注解完成了@Autowired和@Qualifier两个注解所做的事情, 推荐使用。

三. IOC注解例子

1. 新建一个名为IOCAnnotation的Java工程, 拷入相关jar包

2. 新建一个名为UserDao.java的接口

package com.lywgames.dao;

public interface UserDao {
	public void save();
}

3. 新建一个名为UserDaoImpl.java的类实现UserDao.java接口

package com.lywgames.dao.impl;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.lywgames.dao.UserDao;

@Component(value="userDao") 
// 相当于我们在Spring的XML配置了一个bean,<bean name="userDao" class="com.lywgames.dao.impl.UserDaoImpl"/>
public class UserDaoImpl implements UserDao {
	@Value("张三") // 注册普通属性
	private String name;
	
	@Override
	public void save() {
		System.out.println("保存" + name + "成功。");
	}

}

4. 新建一个名为UserService.java的接口

package com.lywgames.service;

public interface UserService {
	public void save();
}

5. 新建一个名为UserServiceImpl.java的类实现UserService.java接口

package com.lywgames.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.lywgames.dao.UserDao;
import com.lywgames.service.UserService;

@Component(value="userService") // 相当于我们在XML配置了一个bean,<bean name="userService" class="com.lywgames.service.impl.UserServiceImpl"/>
public class UserServiceImpl implements UserService {
	@Autowired // 注册对象类型
	@Qualifier(value="userDao") // 按照名称完成属性注入
	private UserDao userDao;
	
	@Override
	public void save() {
		userDao.save();
	}

}

6. 新建一个名为UserAction.java的类

package com.lywgames.web.action;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.service.UserService;

public class UserAction {
	
	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = applicationContext.getBean(UserService.class);
		userService.save();
		applicationContext.close();
	}
	
}

7. 在src目录下创建applicationContext.xml

8. 运行项目

四. Bean生命周期和作用域注解

1. 生命周期相关的注解

1.1. 初始化方法的注解@PostConstruct

1.2. 销毁方法的注解@PreDestroy

2. bean作用范围的注解@Scope

2.1. @Scope的值

2.1.1. singleton: 默认单例。

2.1.2. prototype: 多例。

2.1.3. request: 应用在web项目中, Spring创建这个类的对象以后, 将这个对象存入到request范围中。

2.1.4. session: 应用在web项目中, Spring创建这个类的对象以后, 将这个对象存入到session范围中。

2.2. 添加@Scope注解

五. Bean生命周期和作用域注解

1. 新建一个名为IOCAnnotationLifeCycle的Java工程, 拷入相关jar包

2. 新建一个名为UserDao.java的接口

package com.lywgames.dao;

public interface UserDao {
	public void save();
}

3. 新建一个名为UserDaoImpl.java的类实现UserDao.java接口

package com.lywgames.dao.impl;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import com.lywgames.dao.UserDao;

@Repository(value="userDao") // 相当于我们在XML配置了一个bean,<bean name="userDao" class="com.lywgames.dao.impl.UserDaoImpl"/>
@Scope(value="prototype")
public class UserDaoImpl implements UserDao {
	@Value("张三") // 注册普通属性
	private String name;
	
	public UserDaoImpl() {
		System.out.println("UserDaoImpl被创建了");
	}
	
	@PostConstruct
	public void init() {
		System.out.println("UserDaoImpl被初始化了");
	}
	
	@Override
	public void save() {
		System.out.println("保存" + name + "成功。");
	}
	
	@PreDestroy
	public void destroy() {
		System.out.println("UserDaoImpl被销毁了");
	}

}

4. 新建一个名为UserService.java的接口

package com.lywgames.service;

public interface UserService {
	public void save();
}

5. 新建一个名为UserServiceImpl.java的类实现UserService.java接口

package com.lywgames.service.impl;

import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.lywgames.dao.UserDao;
import com.lywgames.service.UserService;

@Service(value="userService") // 相当于我们在XML配置了一个bean,<bean name="userService" class="com.lywgames.service.impl.UserServiceImpl"/>
public class UserServiceImpl implements UserService {
	@Resource(name="userDao") // 完成对象的按名称注入
	private UserDao userDao;
	
	@Override
	public void save() {
		userDao.save();
	}

}

6. 新建一个名为UserAction.java的类

package com.lywgames.web.action;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.service.UserService;

public class UserAction {
	
	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = applicationContext.getBean(UserService.class);
		userService.save();
		applicationContext.close();
	}
	
}

7. 在src目录下创建applicationContext.xml

8. 运行项目

六. XML方式和注解方式

1. XML方式和注解方式比较

 

基于XML配置

基于注解配置

Bean定义

<bean id="" class=""/>

@Component: 修饰一个类

 

@Component的衍生类

@Controller: 修饰Web层类

@Service: 修饰service层类

@Repository: 修饰dao层类

Bean名称

通过id或name指定

@Component(value="")

Bean注入

构造函数注入:

<constructor-arg name="id" value="101"/>

属性注入:

<property name="id" value="102"/>

p命名空间:

<bean p:id="" p:teacher-ref=""/>

SpEL表达式:

<property name=="" value="#{}"/>

@Autowired:

按类型注入

@Qualifier(value=""): 

按照名称完成属性注入

 

@Resource(name=""):

完成对象类型属性的按名称注入

声明周期

<bean init-method="" destroy-method=""/>

@PostConstruct初始化

@PreDestroy销毁

Bean作用范围

<bean scope=""/>

@Scope(value="")

适用场景

适用性更广, 结构更加清晰。

适用类是自己定义, 开发更方便。

2. XML和注解的整合开发

2.1. XML定义类

2.2. 注解属性注入

七. XML和注解的整合开发例子

1. 新建一个名为IOCXMLAnnotation的Java工程, 拷入相关jar包

2. 新建一个名为UserDao.java的接口

package com.lywgames.dao;

public interface UserDao {
	public void save();
}

3. 新建一个名为UserDaoImpl.java的类实现UserDao.java接口

package com.lywgames.dao.impl;

import org.springframework.beans.factory.annotation.Value;
import com.lywgames.dao.UserDao;

public class UserDaoImpl implements UserDao {
	@Value("张三") // 注册普通属性
	private String name;
	
	@Override
	public void save() {
		System.out.println("保存" + name + "成功。");
	}
	
}

4. 新建一个名为UserService.java的接口

package com.lywgames.service;

public interface UserService {
	public void save();
}

5. 新建一个名为UserServiceImpl.java的类实现UserService.java接口

package com.lywgames.service.impl;

import javax.annotation.Resource;
import com.lywgames.dao.UserDao;
import com.lywgames.service.UserService;

public class UserServiceImpl implements UserService {
	@Resource(name="userDao") // 完成对象的按名称注入
	private UserDao userDao;
	
	@Override
	public void save() {
		userDao.save();
	}

}

6. 新建一个名为UserAction.java的类

package com.lywgames.web.action;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lywgames.service.UserService;

public class UserAction {
	
	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = applicationContext.getBean(UserService.class);
		userService.save();
		applicationContext.close();
	}
	
}

7. 在src目录下创建applicationContext.xml

8. 运行项目

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值