Spring Annotation简介一

一个简单的范例,主要注意程序的输出,自然可以明白注解的应用

  • 定义接口

package org.study.spring.dao;


import java.util.List;

public interface MovieDao {
    public List<String> findAll();

}

  • 实现接口

package org.study.spring.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import org.study.spring.dao.MovieDao;

//Spring默认采用单例模式,采用prototype属性,每次调用都创建对象
@Scope("singleton")
@Repository(value = "movieImpl")
public class MovieInMemeryDaoImpl implements MovieDao {

    List<String> movies = null;

    public List<String> findAll() {
        movies = new ArrayList<String>();
        movies.add("风吹稻浪");
        movies.add("冈萨雷斯凭");
        movies.add("岁月");
        return movies;
    }

}

  • Service实现

package org.study.spring.service;

import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.study.spring.dao.MovieDao;

/**
 * @Repository、@Service和 @Controller则是@Component的细化,
 *                       用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。
 *                       也就是说,你能用@Component来注解你的组件类, 但如果用@Repository、@Service
 *                       或@Controller来注解它们,你的类也许能更好地被工具处理,或与切面进行关联。
 *
 * @author Administrator 默认为类名首字母小写,通过value属性可自定义Bean的标识
 *
 */
@Scope("prototype")
@Service(value = "sms")
public class SimpleMovieService {
    static int i = 0;
    private MovieDao movieFinder;

    // @Autowired 自动进行注入,但须在spring配置文件中进行配置,并保证唯一性
    @Autowired
    public SimpleMovieService(MovieDao movieFinder) {
        i++;
        System.out.println("创建对象个数:" + i);
        this.movieFinder = movieFinder;
    }

    public void printFindedMovie() {
        List<String> movies = movieFinder.findAll();
        System.out.println(Arrays.deepToString(movies.toArray()));
    }
}

  • 客户端

package org.study.spring;

import java.util.Arrays;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.study.spring.service.SimpleMovieService;

public class MainApp {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("ctx.xml");
        String[] beanNames = ctx.getBeanDefinitionNames();
        System.out
                .println("Spring中的定义的Bean有:" + Arrays.deepToString(beanNames));

        System.out.print("找到的电影有:");
        SimpleMovieService simpleBean1 = (SimpleMovieService) ctx
                .getBean("sms");
        simpleBean1.printFindedMovie();

        SimpleMovieService simpleBean2 = (SimpleMovieService) ctx
                .getBean("sms");
        simpleBean2.printFindedMovie();
        System.out.println("修改@Scope属性值,比较两次输出的不同!");
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值