Spring学习总结(二)---Spring注解

Spring支持的注解

Spring 注解开启

1.使用< context:annotation-config >

<!--开启4种基本注解,需要添加context命名空间-->
<context:annotation-config/>

2.使用< context:annotation-scan >

<!--包含上述的所有注解,并扫描该包下的所有文件-->
<context:annotation-scan base-package="com.little"/>
<!--排除过滤-->
<context:component-scan base-package="com.little">
	<context:exclude-filter type="annotation" 
		expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--包含过滤-->
<context:component-scan base-package="com.little" use-default-filters="false">
	<context:include-filter type="annotation" 
		expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

标准注解

@PostConstruct、@PreDestroy
public class Demo{
	@PostConstruct//在类实例化初始时调用
	public void init(){
	}
	@PreDestroy//在实例销毁时调用
	public void destroy(){
	}
}

作用与Bean配置中的init和destory属性相同。

@Named、@Resource、@Inject

这三个注解都属于标准注解,不是Spring特有的,但是也放到相应的功能里面再仔细记录。

依赖项检查@Required

用在属性Setter上,用以检查该属性进行依赖注入。如果没有配置则会抛出异常。

组件注解

@Named

需要额外导入,maven配置如下。它作用于属性和参数上,根据名字查找容器中对应的对象。

<dependency>
	<groupId>javax.inject</groupId>
	<artifactId>javax.inject</artifactId>
	<version>1</version>
<\dependency>
@Named("user")
public class User{
}
@Component

使用在类上用于实例化Bean(以下三个注解跟此注解功能相同,但具有语义化作用)

//<bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl"></bean>
@Component("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("save running ...");
    }
}
@Controller

在Web层实例化Bean

@Service

在Service层实例化Bean

//<bean id="userService" class="com.littlepants.service.impl.UserServiceImpl">
//@Component("userService")
@Service("userService")
@Repository

在Dao层实例化Bean

//<bean id="userDao" class="com.littlepants.dao.impl.UserDaoImpl"></bean>
//@Component("userDao")
@Repository("userDao")

依赖注入的注解

@Inject

可以使用在构造函数、属性、和setter方法上,需要额外引用。

public class UserService{
	@Inject
	private UserDao userDao;

	@Inject
	public UserService(UserDao userDao){
		this.userDao = userDao;
	}

	@Inject
	public void setUserDao(@Named("userDao") UserDao userDao){//指定名字查找
		this.userDao = userDao;
	}
}
@Autowired

在字段(属性)上用于根据类型(字段类型)依赖注入,从Spring容器中进行匹配。如果容器中有多个同类型的Bean,则会报错。属性注入有变量注入,构造器注入,set方法注入。

//变量注入
@Autowired
UserDao userDao;

//构造器注入
private UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao){
	this.userDao = userDao;
}

//set方法注入
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao){
	this.userDao = userDao;
}

//一般方法注入
@Autowired
public void addUser(UserDao userDao){
}

在使用IDEA编程时,变量注入方法会被标注为不被推荐的注入方法。因为这种方式过于依赖容器,当容器没有注入这个对象时,即对象为NULL时,就会找不到此依赖。但其他两种依赖就没有这个问题,所以在使用中应该尽量避免变量注入。

@Qualifier

结合@Autowired一起使用,根据名称(id)进行依赖注入

//<bean id="userService" class="com.littlepants.service.impl.UserServiceImpl">
@Component("userService")
public class UserServiceImpl implements UserService {

//    <property name="userDao" ref="userDao"></property>

	//当包中有两个对UserDao的实现时,单单使用@Autowired会引起错误
	//使用@Qualifier,指定ID为userDao的实现
    @Qualifier("userDao")
    private UserDao userDao;

    @Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void save() {
        System.out.println("Service Running ...");
    }
}
@Resource

相当于@Autowired+@Qualifier,按照名称进行注入

//使用在属性上
@Resource(name="userDao")
private UserDao = userDao;

//使用在setter方法上
private UserDao userDao;
//@Autowired
@Resource(name = "userDao")
public void setUserDao(UserDao userDao) {
    System.out.println("使用set方法");
    this.userDao = userDao;
}
@Value

注入普通(基本)属性

@Value("Hello World")
private String driver;

//等价于
private String driver="Hello World";

它的使用价值在于,当你在项目中配置了JDBC属性文件时,可以直接读取JDBC文件完成初始化。

//jdbc.properties
jdbc.diver = com.mysql.cj.jdbc.Driver
<!--引入外部配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
@Value(${jdbc.driver})
private String driver;//driver = com.mysql.cj.jdbc.Driver

新注解

非自定义的Bean的配置,加载properties的配置,组件扫描,引入其他配置文件。

Configuration

指定当前类是Spring的配置类,当创建容器时会从该类上加载注解。

ComponentScan

用于指定Spring在初始化容器时要扫描的包,作用与xml配置文件中的< context:component-scan base-package=“com.littlepants” />一样

Bean

使用在方法上,将该方法的返回值存储到Spring容器中。

PropertySource

加载.properties文件中的配置

Import

导入其他配置类

[参考文献]陈学明.Spring+Spring MVC+MyBatis整合开发实战[M].北京:机械工业出版社,2020.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值