在之前的学习中注解都是写在配置文件中,但在实际开发中配置文件一般不会写入注解,所以选择一种更简单的添加注解的方式
实现Spring开发的步骤
一、<bean>怎么添加注解
第一步:导入aop包 如图1-1
图1-1
第二步:在resource目录下 导入 依赖支持 的配置文件:在之前的文章《spring的依赖》中有写,这里不再赘述
<?xml version="1.0" encoding="UTF-8"?>
<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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--指定要扫描的包 这个包下的注解会生效 "component-scan"扫描组键-->
<context:component-scan base-package="com.kuang.pojo"/>
<context:annotation-config/>
</beans>
第三步:为了方便测试这里写了一个User类,理想的输出是“小卜”
注意看注释@Component可以代替<bean>实现
package com.kuang.pojo;
import org.springframework.stereotype.Component;
@Component
//组键的意思 相当于bean注入 <bean id="user" class="com.kuang.pojo.User"/>
public class User {
public String name = "小卜";
}
第四步:写测试类 验证是否可以输出理想结果
import com.kuang.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String args[]) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
//getbean()方法,但是没有bean,可以用user类中定义的组件,名字是默认小写
System.out.println(user.name);
}
}
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
运行成功
这就说明@Component可以代替xml中的<bean>实现的相关功能
二、属性如何注入
稍稍修改一下User类
package com.kuang.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
//组键的意思 相当于bean注入 <bean id="user" class="com.kuang.pojo.User"/>
public class User {
//相当于<property name="name" value="荒">
@Value("荒")
public String name;
}
@Value 简直是神技有木有!!!
再也不用
<bean>
<property....../>
</bean>
很遗憾 这种方法只适用于简单的方法,假设 方法有很多,在xml中配置还是更便捷的
有set方法,可以这样写
@Value("荒")
public void setName(String name){
this.name = name;
}
三、衍生注解
@Component有几个衍生注解,在web开发会按照MVC分成三层
·dao 【@Repository】接口层
·service【@Service】业务层
· controller【@Controller】控制层
以上注解的功能都一样,都是表示将某个类注册到Spring中,装配Bean
四、自动装配
@Autowired
@Qualifier
@Controller
之前的文章有提到 不做赘述
五、作用域
@Scope
@Scope("singleton") //单一模式
@Scope("prototype")//原型模式
什么是单一模式
https://blog.csdn.net/weixin_57504474/article/details/124494554
什么是原型模式
https://www.runoob.com/design-pattern/prototype-pattern.html
六、小结
xml与注解:
xml:更万能,适用于任何场合!维护简单方便
注解:不是自己的类用不了,维护相对复杂
xml与注解的最佳实践:
xml用来管理bean
注解只负责完成属性的注入
只需要保证 注解生效