Я хотел бы использовать его для ведения журналов, довольно типичный вариант использования. Я просмотрел эту статью и думаю, что это большая часть того, что мне нужно. Для ведения журнала он использует AspectJ, а также «аспекты jcambi».
Но я хотел бы сделать что-то вроде следующего:
Код: Выделить всё
public void login(User user) {
String userType = user.getType();
if (!user.isActive()) {
// point cut 1 -- log inactive user
} else if (!user.isPasswordValid()) {
// point cut 2 -- log wrong password
} else {
// point cut 3 -- log successful login
}
}
Код: Выделить всё
|||
Есть ли способ скажите AspectJ:
регистрируйтесь в 'ifs' и
регистрируйте различную информацию, в зависимости от того, что произошло? например, в точечном вырезе 1 запишите одно из следующего:
Код: Выделить всё
admin|login|001|Admin user inactive
user|login|001|Normal user inactive
Код: Выделить всё
admin|login|002|Invalid Admin password
user|login|002|Invalid normal user password
Код: Выделить всё
admin|login|000|Successful Admin login
user|login|000|Successful Normal user login
Есть идеи?
*************************************** РЕДАКТИРОВАТЬ ***** **********************************
Спасибо. вам обоим за ответы! Теперь я понимаю две вещи: 1. У меня впереди много работы. И 2. Я думаю, что придал слишком много внимания примеру «входа в систему».
Вход в систему — это всего лишь один крошечный вариант использования. Моя задача — добавить логирование везде... в кучу методов во многих-многих классах. Практически везде я вижу LOG.debug() или LOG.info(), в любом месте приложения, чтобы заменить его ведением журнала аспектов. Это также означает, что, как бы мне ни хотелось, я не могу просто провести рефакторинг всего кода, чтобы облегчить себе жизнь. Я бы хотел сделать вход в систему с использованием исключений, но это выходит за рамки моей задачи: добавить логирование.
И, конечно, в каждом методе бизнес-логика будет разной, и, как таковое, будет происходить и ведение журнала. Итак, у меня возникает вопрос: как лучше всего это сделать? Я имею в виду, что каждый метод будет иметь свою собственную логику, свои if... и будет условно регистрировать разные вещи. Так стоит ли мне создать аспектный класс для каждого из этих вариантов использования и, по сути, иметь там одни и те же «если»?
Пример (это не вход в систему !): метод, импортирующий данные.
Код: Выделить всё
public void import(String type) {
if (type.equals("people")) {
try {
int result = importPeople();
if (result > 0) {
// do some stuff
LOG.info("ok");
} else {
// do some stuff
LOG.info("problem");
}
} catch (Exception e) {
// do some stuff
LOG.debug("exception ...");
}
} else if (type.equals("places")) {
try {
int result = importPlaces();
if (result > 0) {
// do some stuff
LOG.info("ok");
} else {
// do some stuff
LOG.info("problem");
}
} catch (Exception e) {
// do some stuff
LOG.debug("exception ...");
}
}
}
Я за то, чтобы избавиться от навязчивого кода ведения журналов, но... это похоже на что-то вроде запах кода, который должен иметь логику с ее «если» и т. д. как в исходном методе (потому что метод «делает больше вещей», чем протоколирование), так и в соответствующем аспекте...
В любом случае, вы оба ответили на мой первоначальный вопрос... но у меня может быть только один ответ, поэтому я приму ответ Кригаекса, потому что он кажется, в это вложено много труда!
Подробнее здесь: https://stackoverflow.com/questions/395 ... ditionally