Spring学习——(三)基础注解介绍

通过对前面Hibernate的学习可以知道,对框架的配置都有Xml和Annotation两种方式。Xml配置的优势在于可以在不知道源码的情

况下进行配置,而Annotation的配置方式则更加方便。前面两节介绍了Xml的配置方式,下面就对基于Annotation的配置方式做一个简

单介绍。

利用注解配置有很多优势:

1、它可以充分利用Java反射机制获取类结构信息,这些信息可以有效减少配置的工作。

2、注释和Java代码位于一个文件中,而Xml配置采用的是独立的配置文件,大多数情况下配置信息在程序开发完成后都不会调

整,如果配置信息和Java代码放在一起,有助于增强程序的内聚。而采用独立的XML配置文件,在编写功能时,往往需要在程序文件

和配置文件中不停切换,降低开发效率。

因此,接下来就对常用的Annotation进行学习。首先,为了能够让注解工作,需要在Xml配置文件中作如下修改,作引入:

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
				http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
				http://www.springframework.org/schema/context
				http://www.springframework.org/schema/context/spring-context.xsd">

	<context:annotation-config></context:annotation-config>
</beans>
引入了特定的命名空间后,加入
	<context:annotation-config></context:annotation-config>
便可以在程序中进行基于Annotation的基础开发。

一、@Autowired

它可以对类成员变量、方法以及构造函数进行标注,完成自动装配。

一般来说,该注解标注在setter方法上,利用setter机制注入对象:

	@Autowired
	public void setUserDAO(@Qualifier(value="userDAO")UserDAO userDAO) {
		this.userDAO = userDAO;
	}
该注解默认的方式是byType,按类型注入。当然也可以利用byName,不过要标注上@Qualifier,将value指定为要装载的名字。

也可以注解一般方法:

	@Autowired
	public void prepare(@Qualifier(value="userDAO1")UserDAO userDAO1,@Qualifier(value="userDAO2")UserDAO userDAO2) {
		this.userDAO1 = userDAO1;
		this.userDAO2 = userDAO2;
	}
也可以注解构造方法:

	@Autowired
	public UserServiceImpl(UserDAO userDAO) {
		super();
		this.userDAO = userDAO;
	}
则此时是采用构造方法的方式注入。


二、@Resource

其作用相当于@Autowired,不过后者是按byType注入,而@Resource是默认按照byName方式注入。其中有两个比较重要的

属性,name和type,由于默认是byName方式注入,所以需要保证名字和容器创建的对象相同,否则会抛出异常。


三、@Component

以上两个标签实现了注入的功能,然而此时bean还是需要在xml文件中定义。因此从Spring2.5开始,提供了@Component注解,达

到从xml配置文件中完全移除bean配置的目的。

首先需要在xml文件中加入一行:

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context.xsd">

	<context:annotation-config></context:annotation-config>
	<context:component-scan base-package="cn.wqy"></context:component-scan>
</beans>

该行代码让容器去指定的包目录下寻找被@Component注解了的类,将其当做一个组件,这个组件在别的类调用时就可以看做一个

对象资源。
UserServiceImpl.java:

package cn.wqy.biz;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import cn.wqy.DAO.UserDAO;
import cn.wqy.model.User;

@Component("userService")
public class UserServiceImpl implements UserService {
	private UserDAO userDAO;

	public UserDAO getUserDAO() {
		return userDAO;
	}

	@Resource
	public void setUserDAO(@Qualifier(value="userDAO")UserDAO userDAO) {
		this.userDAO = userDAO;
	}

	@Override
	public void addUser(User user) {
		// TODO Auto-generated method stub
		userDAO.add(user);
	}

}
UserDAO.java:

package cn.wqy.DAO;

import org.springframework.stereotype.Component;
import cn.wqy.model.User;

@Component("userDAO")
public class UserDAOImpl implements UserDAO {

	@Override
	public void add(User user) {
		// TODO Auto-generated method stub
		System.out.println("A user added");
	}

}
之所以指定组件的名字很重要,因为注入的根据就是name,如果名字不同,会抛出异常,找不到对应的对象。

Ps:需要注意的一点:

在目前的Spring版本中,以下几个标签作用相同:@Component、@Controller、@Service、@Repository。

1、@Component是所有受Spring管理的组件的通用形式;

2、@Control对应与表现层的Bean,即Action:

@Controller
@Scope(value="prototype")
public class UserAction{
	...
}
使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字

为"userAction"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认

的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者

【@Controller("UserAction")】,则使用value作为bean的名字。

这里的UserAction还使用了@Scope注解,@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的

scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模

式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对

应不同的Action,scope="prototype" 可以保证当有请求的时候都创建一个Action对象。

3、@Service对应业务层的Bean

package cn.wqy.biz;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import cn.wqy.DAO.UserDAO;
import cn.wqy.model.User;

@Service("userService")
public class UserServiceImpl implements UserService {
	private UserDAO userDAO;

	public UserDAO getUserDAO() {
		return userDAO;
	}
}
4、@Repository对应数据访问层的Bean,即DAO层
package cn.wqy.DAO;

import org.springframework.stereotype.Repository;

import cn.wqy.model.User;

@Repository("userDAO")
public class UserDAOImpl implements UserDAO {

	@Override
	public void add(User user) {
		// TODO Auto-generated method stub
		System.out.println("A user added");
	}

}


四、@Scope

定义bean的生命范围,注解在实体类名上,表明该对象组件的生命范围。


五、@PostConstruct & @PreDestroy

	@PostConstruct
	public void before(){
		
	}
	
	@PreDestroy
	public void after(){
		
	}
分别对应init-method和destroy-method,注解在方法之上,分别在bean初始化完成后及bean销毁前执行。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值