Spring(五)spring的注解IOC
一、准备
1、做IOC注解开发需要引入的jar包

2、applicationContext.xml文件中需要的配置
需要配置组件扫描<context: .. >,来扫描哪些包下用了IOC注解,主要是扫描类上的注解。
<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"> <context:component-scan base-package="com.icss"></context:component-scan> </beans>
二、类上的注解
设置了自动扫描的包后,Spring并不是把所有的Java类都纳入到核心容器中处理,而是在类通过组建注解声明之后才会执行这个操作。
1、@Component--泛指组件,当组件不好归类的时候,可以使用这个注解进行分类
@Component(value = "userdao")
相当于:<bean id = "userdao" class = "com.icss.XXX..."></bean>
@Component public class Man { public void qq() { System.out.println("男人正在聊QQ"); } }
2、@Controller
controller--控制层
@Controller
public class LoginController { //控制层 只管接受前台页面数据, 跳转页面 }
3、@Repository
@Repository 写在持久层
repository--用于标注数据组件,即dao组件
@Repository
public class LoginDaoImpl implements LoginDao {}
4、@Service
service--业务层 数据的变形整合和检验
@Service
public class LoginServiceImpl implements LoginService { //业务逻辑处理 }
三、注释方式设置属性的值
注释方式设置属性的值可以省略掉set方法
1、基本数据类型的属性
@Value()--可省略set(),也可以在set()方法上加
@Value("李四") public void setName(String name) { this.name = name; } @Value("张三") private String name;
2、对象数据类型的属性
(1)Autowried
@Autowried注解默认根据类型type注入,前提是必须找到同类型(相同类型的实现类)的bean对象,若找不到报异常。
注:如果属性有多个实现类,则会出现异常。
例如:

解决:可以通过@Autowried注解进行依赖注入,根据名称进行匹配,通过@Qualifier("bean对象名称")完成依赖注入

(2)Resource
@Resource默认根据名称进行匹配,若找不到同名bean对象,则再根据类型进行匹配。
- Resource(name = "...")
![]()
- Resource(type = "...")
![]()
// @Autowired (required = false) 设置bean对象为空,没有对象的话,就会传空值 // @Resource(name = "loginServiceImpl") //可以根据bean的名称匹配 @Resource(type = LoginDao.class) //也可以根据bean的类型匹配 private LoginDao dao; //= new LoginDaoImpl();
3、其他注解
1)@PostConstruct、@PreDestroy
@PostConstruct // 注解的方法将在类实例化后使用 public void start() { System.out.printf("起始"); } @PreDestroy //注解的方法将在类销毁之前调用 public void end() { System.out.printf("终止"); }
2)@Scope--bean的作用域

@Controller @Scope("prototype") public class LoginController { ... }
3)xml和注解的对比和整合




浙公网安备 33010602011771号