Spring学习总结(二)

编程入门 行业动态 更新时间:2024-10-14 04:29:35

<a href=https://www.elefans.com/category/jswz/34/1769862.html style=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 {@Overridepublic 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{@Injectprivate UserDao userDao;@Injectpublic UserService(UserDao userDao){this.userDao = userDao;}@Injectpublic 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;@Autowiredpublic void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic 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.

更多推荐

Spring学习总结(二)

本文发布于:2024-03-23 20:26:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1742462.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Spring

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!