注解开发的前提
使用注解开发的前提:
1、首先要确保我们确定将aop的包导进来了,直接在maven中导入MVC的依赖即可将这些其他的依赖都导入进来
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
2、确保在applicationContext.xml核心配置文件中导入了context约束3、确保导入了注解的支持
<!--开启注解的支持-->
<context:annotation-config/>
4、也可以通过扫描的形式,扫描某个包下的所有注解都生效(如果使用扫描的形式,那么上面注解的支持可以省略掉,亲测)
<context:component-scan base-package="com.sss.pojo"/>
注解汇总
一、@component
组件的意思,放在类的上面,说明该实体类被Spring管理了,就是我们常说的Bean
该注解的作用相当于我们在applicationContext.xml核心配置文件中对Bean进行注册的操作,然后这个实体类的id默认就是该类的名字小写
等价于:
<bean id="user" class="com.guohui.pojo.User"/>
使用方法:
定义实体类
@Component
public class User {
private String name = "张三";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
public class MyTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user", User.class);
String name = user.getName();
System.out.println(name);
}
}
控制台:
非常重要!!!拓展:
@component将来在MVC三层架构中衍生出三个不同的注解,用于每一层,但是他们的作用都是等价的,都表示组件的意思,使用了这个注解,同样表示该类被Spring管理,表示将该类注册到spring容器中,装配Bean
1、Dao层:用@Repository
@Repository
public class UserDao {
}
2、Service层:用@Servie
@Service
public class UserService {
}
3、Controller层:用@Controller
@Controller
public class UserController {
}
最后呢,将applicationContext.xml核心配置文件中的组件扫描扩大范围,就能将不同层的组件扫描进来
<!--开启注解的支持-->
<context:component-scan base-package="com.sss"/>
二、@value
给属性赋值,放在实体类的属性上或者放在这个属性的set方法上
使用方法:
@Component
public class User {
@Value("李四")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
public class MyTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user", User.class);
System.out.println(user.getName());
}
}
控制台:
三、@Scope
该注解常用来表示某个Bean的作用域,可以选择单例singleton或者原型模式prototype
1、单例模式
@Component
@Scope("singleton")
public class User {
@Value("李四")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
public class MyTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user1 = context.getBean("user", User.class);
User user2 = context.getBean("user", User.class);
System.out.println(user1 == user2);
}
}
控制台:
2、原型模式
@Component
@Scope("prototype")
public class User {
@Value("李四")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
public class MyTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user1 = context.getBean("user", User.class);
User user2 = context.getBean("user", User.class);
System.out.println(user1 == user2);
}
}
控制台:
至此,关于Spring的注解开发技术栈,你已经掌握,尤其是关注@component注解和他的拓展,将来在SpringBoot框架开发中,会频繁的使用这几个注解的!预祝各位早日成为全栈工程师,欢迎指正和交流!