使用注解开发Spring
Spring支持使用注解来开发,但需要引入aop的jar包
maven:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.5</version>
</dependency>
在使用注解开发时,我们还需要在配置文件引入头文件约束:
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
还需要再配置中指定注解扫描包,这样Spring就会去扫描特定的包
<!--指定注解扫描包-->
<context:component-scan base-package="com.nicht.pojo"/>
注解方式实现bean
Spring对应不同层,也有对应着不同的注解,他们的效果和功能都一样
- @Controller:web层
- @Service:service层
- @Repository:dao层
主要讲讲web层也就是 @Component注解
@Component("user")
public class User {
public String name = "孙笑川";
}
**@Component(“user”)**等价于
测试:(调用的情况就和xml情况相同的)
@Test
public void test(){
ApplicationContext applicationContext =new ClassPathXmlApplicationContext("beans.xml");
User user = applicationContext.getBean("user",User.class);
System.out.println(user.name);
}
用注解方式实现属性注入
用注解实现属性注入依靠**@Value注解**,且可以不用添加对应属性的set方法。
@Value一般配置在相对应的属性上方,其为类内部注解。
实体类:
@Component("user")
public class User {
@Value("孙笑川")
public String name;
}
如果有对应的set方法,@Value注解也可以写在set方法上面
@Component("user")
public class User {
public String name;
@Value("孙笑川")
public void setName(String name){
this.name = name;
}
}
Scope(作用域)
在创建多个相同对象时,Spring默认只会创建一个对象,所以多个实例的哈希码也都是一样,也就是所谓的单例模式。
但我们可以**手动修改Scope(作用域)**来改变Spring创建对象的情况,使用@Scope注解来实现,写在类上,是类级别注解
- singleton:单例模式,关闭工厂 ,所有的对象都会销毁。创建唯一对象,哈希码相同
- prototype:多例模式,关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收。可根据实例创建多个对象,哈希码不同
@Controller("user")
@Scope("prototype")
public class User {
@Value("孙笑川")
public String name;
}