Spring注释和简化配置简单介绍

可以说,在Java开发中离不开Spring。在Spring 2.5及以后的版本中,提供了注释和命名空间来简化Spring的配置。
本文就在实际应用中,把最常用的注释和配置做个简单的整理和介绍,也就是本人使用最多的一些功能,其他更高级的功能可以参考Spring官方文档(http://www.springsource.org/documentation)或是通过Google一下。

一、@Autowired注释
以前给一个Bean配置属性时,Bean必须配置<property name="propName" ref="beanId"/>,然后在Java文件,还必须增加属性propname的getter和setter方法。
有了@Autowired注释后,我们可以简化配置文件和getters和setters方法。
1、注释属性
@Autowired
private BeanClassName propName;
当然,我们还必须告诉Spring容器,当它启动时,就去扫描所有的Bean,然后自动注入。
<!-- 对具有@Autowired注释的Bean进行注入 -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
我们也可以注释构造函数和方法。
2、注释构造函数
@Autowired
public MainBean(PropBeanA propBeanA, PropBeanB propBeanB){
this.propBeanA = propBeanA;
this.PropBeanB = PropBeanB ;
}
3、注释方法
@Autowired
public void setPropBean(PropBean propBean) {
this.propBean = propBean;
}
4、@Autowired的相关属性
在默认情况下使用@Autowired注释进行自动注入时,Spring容器中匹配的候选Bean数目必须有且仅有一个。当Springp容器找不到一个匹配的Bean时(可能是没有配置该Bean或是Bean的属性名写错了),Spring容器将抛出BeanCreationException异常,并指出必须至少拥有一个匹配的Bean。
(1)当Bean是可选的,或是不能确定Bean一定有,可以用@Autowired(required = false),这样在找不到匹配Bean 时也不报错,该属性默认为true。
(2)与上面的相反,当Bean有多个时,我们可以通过@Qualifier("beanId")还唯一确定一个所引用的Bean,与@Autowired配合使用,它也有三种使用的地方。

二、@Component注释
虽然我们可以通过@Autowired在Bean类中使用自动注入功能,但是Bean还是在XML文件中通过<bean>进行定义的,通过@Component注释可以实现无需在配置文件中配置Bean的目的。
import org.springframework.stereotype.Component;
@Component
public class BeanClassNameA {
// ......
}
使用@Autowired
@Component
public class BeanClassNameB {
@Autowired
private BeanClassNameA propBeanA;

// ......
}
因为没有配置,我们必须告诉Spring容器启用类扫描机制并自动注入了:
<context:annotation-config />
前面的AutowiredAnnotationBeanPostProcessor可以去掉了,这行的作用后面介绍。
(1)@Component有个可选参数,指定Bean的名称@Component("beanId")
(2)与@Component配合使用,可以通过@Scope指定Bean的作用范围,比如:@Scope("prototype")

三、其他注释
Spring除了提供@Component注释外,还定义了几个注释:@Repository、@Service 和 @Controller。
在目前的Spring 2.5中,这3个注释和@Component是等效的,但是从注释类的命名上,很容易看出这3个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这3个注释和@Component相比没有什么新意,但Spring将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service和 @Controller对分层中的类进行注释,而用@Component对那些比较中立的类进行注释。

四、<context:annotation-config />
<context:annotation-config />将隐式地向Spring容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。

五、<context:component-scan base-package="......" />
通过<context:component-scan base-package="com.packname.common" />,Spring会递归扫描类注释。
具体的说明可以参考:http://springindepth.com/book/annotation-based-bean-config-ioc-container-configuration.html

六、JavaEE应用@Controller
在使用SpringMVC中,可以通过@Controller简化配置
@Controller
@RequestMapping("/welcome.htm")
public class SomeNameController {
@RequestMapping(method = RequestMethod.GET)
public void doGet(ModelMap model, WebRequest request) {
// ...
}
}
关于@Controller,在以后的文章中介绍,敬请关注。

七、简化配置文件
对于属性,我们一般都是通过以下配置的:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
简化之后为:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />
使用方法介绍,我相信就没必要了,注意这两种方式可以一起使用的。

八、命名空间
在以上的<context:.... />和<bean id=".." p:name-ref="" />中,我们用到了context和p命名空间,因此必须在配置文件中申明,我的如下:
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:osgi="http://www.springframework.org/schema/osgi" 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/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byName">
XSD文件版本小技巧:不要增加版本(如直接使用spring-context.xsd),当然要加也是spring-context-2.5.xsd

九、最后
由于介绍内容比较多,感觉都比较空,还有一些没有介绍具体:
(1)JavaEE的注释,主要是@Controller;
(2)JPA注释,@Entity,@Table;
(3)JSR-250的注释,@Resource、@PostConstruct、@PreDestroy等。
以上两上以后文章再做具体介绍。

下面贴出我的Spring配置文件的内容。
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:osgi="http://www.springframework.org/schema/osgi" 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/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byName">

<!-- Activates annotation-based bean configuration -->
<context:component-scan base-package="com.alipay.common" />

<!-- DataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/work_shop?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="manager" />
</bean>

<!-- SqlMapClient -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocations">
<list>
<value>classpath:sqlmap/sqlmap-config.xml</value>
</list>
</property>
</bean>

<!-- SqlMapClientDAO -->
<bean id="sqlMapClientDAO" abstract="true" p:dataSource-ref="dataSource"
p:sqlMapClient-ref="sqlMapClient" />

<!-- TransactionTemplate -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />

<!-- TransactionManager -->
<bean id="mockTransactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate"
p:transactionManager-ref="transactionManager" />

<!-- DAO -->
<bean id="siteUserDAO" class="com.alipay.dal.ibatis.IbatisSiteUserDAO"
parent="sqlMapClientDAO" />
<!-- END OF DAO -->

<!-- MANAGER -->
<bean id="siteUserManager" class="com.alipay.biz.manager.impl.SiteUserManagerImpl" />
<!-- END OF MANAGER -->

<!-- FACADE-->

<!-- END OF FACADE-->

<!-- OSGI SERVICE-->

<!-- END OF OSGI SERVICE-->
</beans>

===========================================
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值