Annotation
Annotation头文件配置
<?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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
</beans>
<context:annotation-config/>讲解
当spring容器启动后会依据这句话初始化四个处理spring Annotation有关的类。
Annotation xml文件代码提示
preferences--xml--xmlCatalog--add加入spring-context.xsd
Location="" keyType="schema location" key="http://www.springframework.org/schema/context/fileName.xsd"
@Autowired 运用的不是很多,会产生很多问题
概述:注入方式byType,spring会在程序代码中有@Aurowired的地方从容器的beans仓库中注入一个与参数类型相同的bean,与参数bean的Name无关。
需要注意的是,保证beans仓库中有该类型的实例,为了实现这一点我们需要使用<bean>标签来或者使用完全注解的方式让spring实例化
一个该参数类型的bean。
构造方法:类A,子属性B(通过注入得到),要确保类A有无参的构造方法。
说明:@Autowired可放在属性和方法前,但属性注入破坏了程序的封装性不推荐使用
public class MovieRecommender
{
private Set<MovieCatalog> movieCatalogs;
@Autowired
public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs)
{ this.movieCatalogs = movieCatalogs;}
}
@Qualifier
概述:当spring的beans仓库中有多个类型相同的bean时,@Autowired注入就会出错,@Querlifier可指定bean的id。在<bean>中id默认可作为
<quarlifier value="" />中的value
代码提示:preferences--java--content assist--for java:.@ 、for javadoc:#
示例:
/*
<bean id="userDaoA" class="com.ssj.dao.UserDao"></bean>
<bean id="userDaoB" class="com.ssj.dao.UserDao"></bean>
*/
public class UserService
{
private UserDao userDao;
@Autowired
public void setUserDao( @Qualifier("userDaoA")UserDao userDao)
{ this.userDao = userDao;}
}
@Resource 推荐使用resource
概述:J2EE定义的注解,需要引入common-annotation.jar。Spring also supports injection using the JSR-250 @Resource annotation on
fields or bean property setter methods.
默认是byName注入(autowired是byType),
spring容器会将<bean name="">标签的name属性value作为@Resource的name属性值(会将id属性值作为qualifier的value属性值),当不指定
resource的name属性时,参数名称对应<bean >标签的name属性
示例:
/*
1、<bean id="userDaoA" name="userDaoA" class="com.ssj.dao.UserDao"></bean>
<bean id="userDaoB" name="userDaoB" class="com.ssj.dao.UserDao"></bean>
*/
public class UserService
{
private UserDao userDao;
@Resource(name="userDaoA")
public void setUserDao( UserDao userDao)
{ this.userDao = userDao;}
}
/*
2、<bean id="userDaoA" name="userDaoA" class="com.ssj.dao.UserDao"></bean>
<bean id="userDaoB" name="userDaoB" class="com.ssj.dao.UserDao"></bean>
*/
public class UserService
{
private UserDao userDao;
@Resource
public void setUserDao( UserDao userDaoA)
{ this.userDao = userDaoA;}
}
全注解配置:
配置文件:
<?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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.ssj"/> <!--扫描com.ssj下的所有包-->
</beans>
概述:spring容器通过<context:component-scan base-package="com.ssj"/>此句会扫描该包下的类
,在有@Component、@Controller、
@Service、@Repository标注的地方就试图实例化该类并存入beans仓库中,若并显示指定对象
名容器会依据类名建立实例化的对象。
@Component、@Controller、@Service、@Repository当某个类不在或分不清在MVC那个层中,用
@Component标注
示例:
//@Repository("myUserDao")
@Repository
public class UserDao
{//.......}
@Service("myUserService")
@Service
public class UserService
{
private UserDao userDao;
@Resource
public void setUserDao(UserDao userDao)
{ this.userDao = userDao;}
/*
@Resource(name="myUserDao")
public void setUserDao(UserDao userDao)
{ this.userDao = userDao;}
*/
/*
@Resource
public void setUserDao(UserDao myUserDao)
{ this.userDao = myUserDao;}
*/
}
@Scope :@Scope("singleton") @Scope("prototype")
示例:
@Scope("singleton")
@Service
public class UserService
{
private UserDao userDao;
@Resource
public void setUserDao(UserDao userDao)
{ this.userDao = userDao;}
@PostConstruct
public void conAfter()
{ System.out.println("构造完成");}
@PreDestroy
public void desBefore()
{ System.out.println("即将销毁");}
}
分享到:
相关推荐
Spring annotation 样例
Spring Annotation
spring annotation注解 使用Spring注解来注入属性
NULL 博文链接:https://cyhcheng.iteye.com/blog/390551
关于Spring annotation的详细介绍,包括 @Component,@Autowired 等,感觉还不错。
花了些时间做了一个实验,彻底弄懂了spring Annotation注入的方式。凡带有@Component,@Controller,@Service,@Repository 标志的等于告诉Spring这类将自动产生对象,而@Resource则等于XML配置中的ref,告诉spring此处...
详解 Spring 3.0 基于 Annotation 的依赖注入实现。。详解 Spring 3.0 基于 Annotation 的依赖注入实现。。
spring的Annotation注解.
Spring的Annotation配置相关讲义
NULL 博文链接:https://dolphin-ygj.iteye.com/blog/548314
spring annotation 从入门到精通
spring annotation example source code java maven
Spring注解开发代码+脑图+源码分析+spingmvc源码分析
SpringMVC Spring MyBatis 框架整合 Annotation Maven Project
NULL 博文链接:https://wolfsoft.iteye.com/blog/799226
SpringAnnotation