系列博文

    JavaWeb_(Spring框架)xml配置文件   传送门

    JavaWeb_(Spring框架)注解配置    传送门

Spring注解配置

  a)导包和约束:基本包、aop包+context约束;

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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 "> <!-- 注解开发 -->
<!-- 开启组件扫描 base-package 扫描该包下以及子包的所有注解 -->
<context:component-scan base-package="com.Gary.bean"/> </beans>

applicationContext_annotation.xml

  b)将对象注册到容器内;

  在User2.java中需要用到<bean name="user" class="com.Gary.bean.User">的地方使用@Component("user")

  @Controller()    1对应web层

  @Service("user")  对应service

  @Repository()     对应dao层

  

package com.Gary.bean;

import org.springframework.stereotype.Component;

//<bean name="user" class="com.Gary.bean.User">
@Component("user")
public class User2 { private Integer u_id;
private String u_username;
private String u_password; //加入宠物字段
private Pet u_pet; @Override
public String toString() {
return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet
+ "]";
}
public Pet getU_pet() {
return u_pet;
}
public void setU_pet(Pet u_pet) {
this.u_pet = u_pet;
} public User2() {
System.out.println("默认使用 User2 对象空参构造方法");
} public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
}
public void setU_password(String u_password) {
this.u_password = u_password;
} }

User2.java

package com.Gary.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User2; public class Test_Annotation { //Spring是一个容器,它将帮助我们管理对象
@Test
public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_annotation.xml"); User2 u2 = (User2) ac.getBean("user"); System.out.println(u2); } }

Test_Annotation.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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 "> <!-- 注解开发 -->
<!-- 开启组件扫描 base-package 扫描该包下以及子包的所有注解 -->
<context:component-scan base-package="com.Gary.bean"/> </beans>

applicationContext_annotation.xml

  c)用注解配置Scope属性; 

  在需要加Scope属性的bean实体层下使用

  @Service("user")
  //@Scope默认是单例的
  @Scope(scopeName="prototype")

  

package com.Gary.bean;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; //<bean name="user" class="com.Gary.bean.User">
//@Component("user")
@Service("user")
//@Scope默认是单例的
@Scope(scopeName="prototype")
public class User2 { private Integer u_id;
private String u_username;
private String u_password; //加入宠物字段
private Pet u_pet; @Override
public String toString() {
return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet
+ "]";
}
public Pet getU_pet() {
return u_pet;
}
public void setU_pet(Pet u_pet) {
this.u_pet = u_pet;
} public User2() {
System.out.println("默认使用 User2 对象空参构造方法");
} public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
}
public void setU_password(String u_password) {
this.u_password = u_password;
} }

User2.java

package com.Gary.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User2; public class Test_Annotation { //Spring是一个容器,它将帮助我们管理对象
@Test
public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_annotation.xml"); User2 u1 = (User2) ac.getBean("user");
User2 u2 = (User2) ac.getBean("user");
//@Scope(scopeName="prototype")多例的 System.out.println(u1==u2); } }

Test_Annotation.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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 "> <!-- 注解开发 -->
<!-- 开启组件扫描 base-package 扫描该包下以及子包的所有注解 -->
<context:component-scan base-package="com.Gary.bean"/> </beans>

applicationContent_annotation.xml

  d)注解配置init-method与destroy-method;

    //在构造方法后调用
@PostConstruct()
public void userInit() {
System.out.println("构造方法");
} //在销毁方法前调用
@PreDestroy()
public void userDestory() {
System.out.println("销毁方法");
}

  

package com.Gary.bean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; //<bean name="user" class="com.Gary.bean.User">
//@Component("user")
@Service("user")
public class User2 { private Integer u_id;
private String u_username;
private String u_password; //加入宠物字段
private Pet u_pet; @Override
public String toString() {
return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet
+ "]";
}
public Pet getU_pet() {
return u_pet;
}
public void setU_pet(Pet u_pet) {
this.u_pet = u_pet;
} public User2() {
System.out.println("默认使用 User2 对象空参构造方法");
} public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
}
public void setU_password(String u_password) {
this.u_password = u_password;
} //在构造方法后调用
@PostConstruct()
public void userInit() {
System.out.println("构造方法");
} //在销毁方法前调用
@PreDestroy()
public void userDestory() {
System.out.println("销毁方法");
} }

User2.java

package com.Gary.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User2; public class Test_Annotation { //Spring是一个容器,它将帮助我们管理对象
@Test
public void Test2() { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_annotation.xml"); User2 u1 = (User2) ac.getBean("user"); ac.close(); } }

Test_Annotation.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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 "> <!-- 注解开发 -->
<!-- 开启组件扫描 base-package 扫描该包下以及子包的所有注解 -->
<context:component-scan base-package="com.Gary.bean"/> </beans>

applicationContext_annotation.xml

  e)注解配置属性注入,值类型与引用类型;

  属性、值注入

    @Value(value="111111111")
private Integer u_id;
@Value(value="ggggggary")
private String u_username;
private String u_password;

  

package com.Gary.bean;

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.Service; //<bean name="user" class="com.Gary.bean.User">
//@Component("user")
@Service("user")
public class User2 { @Value(value="111111111")
private Integer u_id;
@Value(value="ggggggary")
private String u_username;
private String u_password; //加入宠物字段
private Pet u_pet; @Override
public String toString() {
return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet
+ "]";
}
public Pet getU_pet() {
return u_pet;
}
public void setU_pet(Pet u_pet) {
this.u_pet = u_pet;
} public User2() {
System.out.println("默认使用 User2 对象空参构造方法");
} public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
}
public void setU_password(String u_password) {
this.u_password = u_password;
} //在构造方法后调用
@PostConstruct()
public void userInit() {
System.out.println("构造方法");
} //在销毁方法前调用
@PreDestroy()
public void userDestory() {
System.out.println("销毁方法");
} }

User2.java

package com.Gary.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User2; public class Test_Annotation { //Spring是一个容器,它将帮助我们管理对象
@Test
public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_annotation.xml"); User2 u1 = (User2) ac.getBean("user"); System.out.println(u1); } }

Test_Annotation.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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 "> <!-- 注解开发 -->
<!-- 开启组件扫描 base-package 扫描该包下以及子包的所有注解 -->
<context:component-scan base-package="com.Gary.bean"/> </beans>

applicationContext_annotation.xml

  也可以在方法上加注释

    @Value("233333333")
public void setU_password(String u_password) {
this.u_password = u_password;
}

  Spring能在private私有成员上通过@Value()去赋值,使用了暴力反射去注入的,推荐使用在set()方法上注入属性

  引用类型注入

  给宠物起名为cat,并给宠物类型和颜色通过@Value赋值

@Component("cat")
public class Pet {
    @Value("猫猫猫")
public void setPetType(String petType) {
this.petType = petType;
} @Value("灰色")
public void setColor(String color) {
this.color = color;
}
package com.Gary.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component("cat")
public class Pet { //宠物类型 猫 狗
private String petType;
//宠物颜色
private String color; @Override
public String toString() {
return "Pet [petType=" + petType + ", color=" + color + "]";
}
public String getPetType() {
return petType;
} @Value("猫猫猫")
public void setPetType(String petType) {
this.petType = petType;
} @Value("灰色")
public void setColor(String color) {
this.color = color;
} public String getColor() {
return color;
} }

Pet.java

  在User.java上使用@Autowired()自动装配

    //使用自动装配,加入宠物字段
@Autowired
private Pet u_pet;

  第一种:用@Autowired()代替,缺点:问题:如果匹配到多个类型一致的对象,将无法注入到具体哪个对象

  为了解决这个确定

  第二种:用@Qualifier("userService")

  第三者@Resource(name="userService")

package com.Gary.bean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; //<bean name="user" class="com.Gary.bean.User">
//@Component("user")
@Service("user")
public class User2 { @Value(value="111111111")
private Integer u_id;
@Value(value="ggggggary")
private String u_username;
private String u_password; //使用自动装配,加入宠物字段
@Autowired
private Pet u_pet; @Override
public String toString() {
return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet
+ "]";
}
public Pet getU_pet() {
return u_pet;
}
public void setU_pet(Pet u_pet) {
this.u_pet = u_pet;
} public User2() {
System.out.println("默认使用 User2 对象空参构造方法");
} public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
} @Value("233333333")
public void setU_password(String u_password) {
this.u_password = u_password;
} //在构造方法后调用
@PostConstruct()
public void userInit() {
System.out.println("构造方法");
} //在销毁方法前调用
@PreDestroy()
public void userDestory() {
System.out.println("销毁方法");
} }

User2.java

  

package com.Gary.bean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; //<bean name="user" class="com.Gary.bean.User">
//@Component("user")
@Service("user")
public class User2 { @Value(value="111111111")
private Integer u_id;
@Value(value="ggggggary")
private String u_username;
private String u_password; //使用自动装配,加入宠物字段
@Autowired
private Pet u_pet; @Override
public String toString() {
return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_pet=" + u_pet
+ "]";
}
public Pet getU_pet() {
return u_pet;
}
public void setU_pet(Pet u_pet) {
this.u_pet = u_pet;
} public User2() {
System.out.println("默认使用 User2 对象空参构造方法");
} public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
} @Value("233333333")
public void setU_password(String u_password) {
this.u_password = u_password;
} //在构造方法后调用
@PostConstruct()
public void userInit() {
System.out.println("构造方法");
} //在销毁方法前调用
@PreDestroy()
public void userDestory() {
System.out.println("销毁方法");
} }

User2.java

package com.Gary.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component("cat")
public class Pet { //宠物类型 猫 狗
private String petType;
//宠物颜色
private String color; @Override
public String toString() {
return "Pet [petType=" + petType + ", color=" + color + "]";
}
public String getPetType() {
return petType;
} @Value("猫猫猫")
public void setPetType(String petType) {
this.petType = petType;
} @Value("灰色")
public void setColor(String color) {
this.color = color;
} public String getColor() {
return color;
} }

Pet.java

package com.Gary.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.Gary.bean.User2; public class Test_Annotation { //Spring是一个容器,它将帮助我们管理对象
@Test
public void Test2() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_annotation.xml"); User2 u1 = (User2) ac.getBean("user"); System.out.println(u1); } }

Test_Annotation.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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 "> <!-- 注解开发 -->
<!-- 开启组件扫描 base-package 扫描该包下以及子包的所有注解 -->
<context:component-scan base-package="com.Gary.bean"/> </beans>

applicationContext_annotation.xml

最新文章

  1. Deploying JRE (Native Plug-in) for Windows Clients in Oracle E-Business Suite Release 12 (文档 ID 393931.1)
  2. rem是如何实现自适应布局的?
  3. NET软件开发中的事务大全
  4. [转载]破解TexturePacker加密资源
  5. NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识
  6. Uploadify 3.2 参数属性、事件、方法函数详解
  7. 怎样通过iPhone Safari 来安装测试版ipa
  8. C++中构造函数和析构函数调用的时机
  9. SQL server 时间日期函数、类型转换
  10. onCreateOptionsMenu与onCreateContextMenu差别
  11. 201521123080《Java程序设计》第8周学习总结
  12. 201521123070 《JAVA程序设计》第5周学习总结
  13. [bzoj 2017] [Usaco2009 Nov]硬币游戏
  14. 20170109| javascript记录
  15. C实战:项目构建Make,Automake,CMake【转】
  16. Struts2 xxAction-validation.xml使用
  17. 阿里巴巴开源项目: canal
  18. 多个IoC容器适配器设计及性能测试(Castle.Windsor Autofac Spring.Core)
  19. $@和 $*-linux_Shell
  20. Elasticsearch 索引、更新、删除文档

热门文章

  1. 题解 P3378 【【模板】堆】
  2. js中prototype与__proto__的关系详解
  3. laravel 框架 数据库迁徙时SQLSTATE[420000]错误
  4. ECharts雷达图详细配置说明
  5. 批量删除redis
  6. vuejs开发流程
  7. RT-Thread--时间管理
  8. Ubuntu系统---报错Assertion &#39;0&#39; failed
  9. 关键字final 修饰类、方法、属性、参数类型
  10. 直接插入排序Straight_Insertion_Sort