Spring详解之注解(三)

1.导包


1.2 导入约束

在applicationContext.xml添加以下代码

xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context.xsd

1.3指定要扫描的包

<!--指定扫描的位置,自动扫描该包以及该包的所有子包-->
<context:component-scan base-package="cn.hd.annotation"></context:component-scan>

1.4为类声明注解

在类声明书写一段代码(最原始的注解)

相当于在.xml中写的 bean name=user class=cn.hd.annotation.User
@Component("user")
public class User {
    private String name;
    private String age;
    private String address;
    private Car car;

为了解决所有的bean类都是一个注解,导致系统的层次不清晰,提出里三个注解

@Conponent是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次

@Service通常作用在业务层,目前该功能与@Component相同

@Constroller通常作用在控制层

@Repository通常作用在dao层

@Component("user")这个不是哦,也可以用
    
@Controller("user")//对应action  web
        
@Service("user")//service
            
@Repository("user")//dao

没有强制要求,都可以用,提倡按照它的本意去注解

修改scope属性

@Scope("scopeName=prototype")

 

singleton/prototype单例和多例

可以写requestresponsesession

属性注入

(1)属性注入

注释写在属性上面,同时也可以写在set方法上面

public class User {
    @Value("张三")
    private String name;
    @Value("20")
    private String age;
    @Value("华点")
    private String address;

(2)引用类型

@Autowired注释,它可以对类成员变量,方法以及构造函数进行标注,完成自动封装。(如果是多个不使用@Autowired)

@Qualifier的标注对象是成员变量,方法入参,构造函数入参。

@Qualifier只能和@Autowired结合使用,是对@Autowired有益的补充。一般来讲,@Qualifier

对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,,面@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,String将@resource注释的name属性解析为Bean的名字,而type属性则解析为Bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byName自动注入。如果既不指定name也不指定type属性,这时将会通过反射机制使用byName自动注入

  @Autowired  //自动装配  如果只有一个对象,自动装配
  
@Qualifier("car2")  自动装配时有多个对象就要指定是哪个对象,与自动装配配合使用
  @Resource(name = "car") 直接指定配置哪个对象
  private Car car;

(3)创建对象后就执行的方法

@PostConstruct
public void init(){
    System.out.println("对象创建后自动执行");
}
@PreDestroy
public void destroy(){
    System.out.println("对象执行前销毁");
}

 

@Test
public void fun() {
    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("cn/hd/annotation/applicationContext.xml");
    User user = (User) ac.getBean("user");
    User user1 = (User) ac.getBean("user");
    System.out.println(user);
    ac.close();
}

Spring结合junit

1.导包


2.书写测试代码

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:cn/hd/annotation/applicationContext.xml")
public class Demo1 {
    @Resource(name = "user")
    private User user;
    @Test
    public void fun(){
        System.out.println(user);
    }
}

@RunWith(SpringJUnit4ClassRunner.class)

结合Junit测试

@ContextConfiguration("classpath:cn/hd/annotation/applicationContext.xml")

读取文件配置

 

由于原来使用的是ApplicationContext对象,读取配置和获得bean对象,但是没有了,又想获得对象,这时可以使用下面的代码

@Resource(name = "user")
private User user;


  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值