(三)Spring 中注解的使用

1.使用注解的前提

2.开启注解扫描

3.用注解创建类对象

4.用注解@Autowired注入对象属性

5.用注解@Resource注入对象属性

 

 

(一)使用注解的前提

 

1.导入基本的jar包:

 

 

基本的jar包一共6个,前2个要额外自己找。后4个可以在在spring-framework上找到。

另外,要使用注解功能,要在 spring-framework上额外找出:

并作为基本jar包一起导入项目工程中。

 

2.创建spring配置文件,引入约束(这是使用注解所需要的约束)

如果找到要引入的约束?

在下载好的spring-framework的docs\spring-framework-reference\html 下用浏览器打开最后一个html文件-----xsd.configuration

约束代码为:

 

<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"> <!-- bean definitions here -->

</beans>

 

 

 

 

 

创建spring 配置文件(起名为Bean.xml),并赋值约束代码:即可完成配置的工作

 

(二)开启注解扫描

目录树:

 

在配置文件中,加入:

<context:component-scan base-package="package"></context:component-scan>  为开启注解扫描,会到指定包中扫描类,方法,属性上是否存在注解

package:为要扫描的包名,如com.spring.demo ,若要扫描com.spring.*  ,package处可写 com.spring 代替。同理 若package=“com” 代表扫描com.* 下的源文件

如:

Bean.xml

 

<另外>:

还有一个比较少用的扫描标签,它只会扫描属性(即变量)

<context:annotation-config></context:annotation-config>

仅作了解即可。

 

(三)用注解创建类对象

1.创建一个类(要实例化的bean):

User.java:

 

package com.spring.demo;

import org.springframework.stereotype.Component;

@Component(value="user")  	//相当于配置文件里的<bean id="user" class=""></bean>
							//注意:@Component("user") 也是可以的
public class User{
	public void method(){
		System.out.println("this is User's method...");
	}
}

@Component 就是注解。(有@的)
 

 

2.测试代码:

Test_demo.java:

 

package com.spring.demo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test_demo {
	
	@Test
	public void Test_print(){
		ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
		User u = (User)context.getBean("user");
		u.method();
	}
	
}

 

运行效果:

com.spring.demo.User@45f45fa1
this is User‘s method...

 

<另外>:<scope>注解的使用:

 

<scope>用于指定用注解创造的对象是单实例还是多实例。

默认情况下(即不写scope时),是单实例的。

当@scope(“prototype”)  :表示类是多实例的,当@scope(“singleton”)即为单实例

如:

 

<另外>:

@Component

@Controller

@Service

@Repository

这四个注解的作用是一样的,都是创建对象

 

(四)用注解@Autowired注入 对象属性

注入对象属性,可以用到注解@Autowired

1.首先有个User.java:

 

package com.spring.demo;

import org.springframework.stereotype.Component;

@Component("user")
public class User {
	public void method(){
		System.out.println("user 's method.....");
	}
}

第5行: 用注解自动创建User对象,且把@Component(“user”)下的类标记为一个bean。其注解内字符“user”用于给@Autowired查找到这个bean。
 

 

 

2.又有一个 service类:

User_Service.java:

 

package com.spring.demo;

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

@Service("service")
public class User_Service {
	@Autowired
	private User user;

	public void s_method(){
		user.method();
	}
}

第八行,注解@Autowired 表示 User类的 user变量会被自动注入对象,注入的对象来自 User 的@Component注解创建

注意:

在使用@Autowired时,首先在容器中查询对应类型的bean

    如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

    如果查询的结果不止一个,那么@Autowired会根据名称来查找。

    如果查询的结果为空,那么会抛出异常。

 

 

3.测试代码:

Test_demo.java:

package com.spring.demo;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test_demo {
	@Test
	public void test(){
		ApplicationContext context = new ClassPathXmlApplicationContext("Bean1.xml");
		User_Service u = (User_Service)context.getBean("service");
		System.out.println(u);
		u.s_method();
	}
}


结果:

 

通过获得 User_Service 对象,调用其s_method方法 来 调用 User对象的 method方法,打印出:method.....

 

 

(五)用注解@Resource注入对象属性

@Autowired 不能指定注入哪个对象

@Resourcce 能指定注入哪个对象

如:

User_Service.java:

 

package com.spring.demo;

import javax.annotation.Resource;

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

@Service("service")
public class User_Service {
	
	@Resource(name="user")	//@Resource的 name 与 User.java 中注解@Component 中的名字(value字段)要相同
	private User user;

	public void s_method(){
		user.method();
	}
}

运行的结果与上面是一样的(用@Autowired)
 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值